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 de permissão explícita.

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

Com a API Web Share, é possível compartilhar texto, URLs ou arquivos. Na forma mais simples, o código de compartilhamento é semelhante a este:

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 exigirá que você permita explicitamente a operação. Para fazer isso, adicione um atributo allow à tag <iframe> com um valor de web-share. Isso informa ao navegador que o site de incorporação permite que o iframe incorporado de terceiros 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 do Glitch e consulte o código-fonte. Se o atributo não for informado, o resultado vai ser uma NotAllowedError com a mensagem Failed to execute 'share' on 'Navigator': Permission denied. Todos os fornecedores de navegadores concordaram com essa limitação para melhorar a privacidade e a segurança dos usuários e evitar que usuários de má-fé, por exemplo, anúncios abusivos, acionem ações de compartilhamento inesperadas.