Novos requisitos para a API Web Share em iframes de terceiros

Para melhorar a privacidade e a segurança, as chamadas da API Web Share em iframes de terceiros agora precisam ser explicitamente permitidas.

Este artigo aborda uma mudança potencialmente interruptiva na API Web Share. Essa mudança já está no Firefox, vai ser lançada no Chrome a partir da versão 110 e deve ser lançada no Safari em breve.

A API Web Share permite compartilhar texto, URLs ou arquivos. Na forma mais simples, o código de compartilhamento tem esta aparência:

try {
  await navigator.share({
    title: 'Title',
    text: 'Text',
    url: location.href,
  });
} catch (err) {
  console.error(`${err.name}: ${err.message}`);
}

Se uma ação de compartilhamento precisar acontecer em um iframe de terceiros, uma mudança recente na especificação exige que você permita explicitamente a operação. Para fazer isso, adicione um atributo allow à tag <iframe> com o valor web-share. Isso informa ao navegador que o site de incorporação permite que o iframe de terceiros incorporado acione a ação de compartilhamento.

<!DOCTYPE html>
<html lang="en">
  <body>
    <h1>Web Share in third-party iframes</h1>
    <!-- The embedding page is hosted on https://example.com/index.html. -->
    <iframe allow="web-share" src="https://third-party.example.com/iframe.html"></iframe>
  </body>
</html>

Confira isso em ação em uma demonstração no Glitch e confira o código-fonte. Se o atributo não for fornecido, o resultado será uma NotAllowedError com a mensagem Failed to execute 'share' on 'Navigator': Permission denied. Essa limitação foi acordada por todos os fornecedores de navegadores para melhorar a privacidade e a segurança dos usuários e impedir que usuários de má-fé, por exemplo, anúncios abusivos, acionem ações de compartilhamento inesperadas.