Pour améliorer la confidentialité et la sécurité, les appels de l'API Web Share dans les iFrames tiers doivent désormais être explicitement autorisés.
Cet article décrit une modification potentiellement destructive de l'API Web Share. Cette modification est déjà disponible dans Firefox, sera déployée dans Chrome à partir de la version 110 et devrait être bientôt disponible dans Safari.
L'API Web Share vous permet de partager du texte, des URL ou des fichiers. Dans sa forme la plus simple, le code de partage se présente comme suit:
try {
await navigator.share({
title: 'Title',
text: 'Text',
url: location.href,
});
} catch (err) {
console.error(`${err.name}: ${err.message}`);
}
Si une action de partage doit se produire dans une iframe tierce, un changement récent de spécification vous oblige à autoriser explicitement l'opération. Pour ce faire, ajoutez un attribut allow
à la balise <iframe>
avec une valeur de web-share
. Cela indique au navigateur que le site d'intégration autorise l'iFrame tiers intégré à déclencher l'action de partage.
<!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>
Vous pouvez voir ce comportement en action dans une démonstration sur Glitch et consulter le code source.
Si vous ne fournissez pas l'attribut, un NotAllowedError
s'affiche avec le message Failed to execute 'share' on 'Navigator': Permission denied
. Cette limitation a été convenue par tous les fournisseurs de navigateurs afin d'améliorer la confidentialité et la sécurité des utilisateurs, et d'empêcher les acteurs malveillants (par exemple, les annonces abusives) de déclencher des actions de partage inattendues.