A função ClipboardItem.supports() agora está disponível na versão de referência

Publicado em 30 de abril de 2025

Comemoração: esse recurso da Web agora está disponível nos três principais mecanismos de navegação e será lançado como baseline a partir de 30 de março de 2025.

A API Async Clipboard tornou o trabalho com a área de transferência muito mais fácil do que antes. Em vez de métodos anteriores para gerenciar a área de transferência, agora você pode chamar navigator.clipboard.writeText() para conteúdo de texto simples ou navigator.clipboard.write() para "quase" tudo, como imagens, conteúdo textual ou HTML.

Até agora, faltava quantificar o "quase". Por exemplo, você não sabia se a API oferecia suporte a SVG até tentar e, em caso de incompatibilidade, capturar a exceção gerada. Essa não era uma maneira muito ergonômica de determinar o suporte, e por isso a função estática ClipboardItem.supports() foi especificada.

A função agora alcançou o status "Disponível", o que significa que o trabalho com a área de transferência ficou ainda melhor. Para saber se um navegador oferece suporte a um determinado formato, transmita o tipo MIME do formato de seu interesse para a função.

const format = 'image/svg+xml';
const supportsFormat = ClipboardItem.supports(format);
console.log(`This browser does${supportsFormat ? '' : ' not'} support ${format}.`);
// "This browser does support image/svg+xml."

Antes, eu escrevia quase tudo, e é aí que as coisas ficam realmente interessantes. Os formatos personalizados da Web permitem trabalhar com formatos que o navegador não oferece de forma nativa. Por exemplo, por padrão, o navegador não oferece suporte a imagens AVIF.

const format = 'image/avif';
const supportsFormat = ClipboardItem.supports(format);
console.log(`This browser does${supportsFormat ? '' : ' not'} support ${format}.`);
// "This browser does not support image/avif."

No entanto, ao usar formatos personalizados da Web, você pode trabalhar com imagens AVIF e copiá-las e colá-las livremente, desde que a parte receptora também saiba como lidar com o formato personalizado da Web.

const format = 'web image/avif';
const supportsFormat = ClipboardItem.supports(format);
console.log(`This browser does${supportsFormat ? '' : ' not'} support ${format}.`);
// "This browser does support web image/avif."

Graças à função ClipboardItem.supports(), agora você pode detectar corretamente a situação de suporte à área de transferência para o formato personalizado da Web e garantir que ele funcione.

if (ClipboardItem.supports('web image/avif')) {
  // Fetch remote AVIF image and obtain its blob representation.
  const blob = await fetch('image.avif').then((response) => response.blob());

  try {
    // Write the image data to the clipboard, prepending the blob's actual
    // type (`"image/avif"` with the string `"web "`, so it becomes
    // `"web image/avif"`.
    const clipboardItem = new ClipboardItem({
      'web image/avif': blob,
    });
    await navigator.clipboard.write([clipboardItem]);
  } catch (err) {
    console.error(err.name, err.message);
  }
}

Com a função ClipboardItem.supports() agora disponível como padrão, os desenvolvedores da Web podem detectar com segurança o suporte à área de transferência para vários tipos MIME, incluindo formatos personalizados da Web. Esse aprimoramento torna o trabalho com a área de transferência mais robusto e previsível, melhorando a experiência do usuário em todos os navegadores.