Para melhorar a privacidade e a segurança, as chamadas da API Web Share em iframes de terceiros agora precisam ser permitidas explicitamente.
Este artigo aborda uma mudança potencialmente interruptiva na API Web Share. Essa mudança já está no Firefox, será lançada no Chrome a partir da versão 110 e deve chegar ao Safari em breve.
Com a API Web Share, é possível compartilhar textos, URLs ou arquivos. Na forma mais simples, o código de compartilhamento é parecido com 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 vai exigir 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 GitHub e veja o código-fonte.
Se você não fornecer o atributo, vai receber um 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 evitar que usuários de má-fé, por exemplo, anúncios abusivos, acionem ações de compartilhamento inesperadas.