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.