Nouvelles exigences pour l'API Web Share dans des cadres iFrame tiers

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 traite d'une modification potentiellement destructive de l'API Web Share. Cette modification est déjà en place dans Firefox, sera déployée dans Chrome à partir de la version 110 et devrait l'être bientôt 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 avoir lieu dans un iFrame tiers, une modification récente des spécifications vous oblige à autoriser explicitement l'opération. Pour ce faire, ajoutez un attribut allow à la balise <iframe> avec la valeur 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 cela en action dans une démonstration sur GitHub et consulter le code source. Si vous ne fournissez pas l'attribut, vous recevrez une erreur NotAllowedError 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 personnes malintentionnées (par exemple, les annonces abusives) de déclencher des actions de partage inattendues.