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

Pour améliorer la confidentialité et la sécurité, les appels d'API Web Share dans des cadres iFrame tiers doivent désormais être explicitement autorisés.

Cet article concerne une modification potentiellement destructive de l'API Web Share. Cette modification existe déjà dans Firefox. Elle sera disponible dans Chrome à partir de la version 110 et devrait bientôt arriver 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 être effectuée 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. Elle 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 observer ce fonctionnement dans une démonstration de Glitch et voir le code source. Si vous ne fournissez pas l'attribut, une NotAllowedError est générée avec le message Failed to execute 'share' on 'Navigator': Permission denied. Tous les fournisseurs de navigateurs ont accepté cette limitation afin d'améliorer la confidentialité et la sécurité des utilisateurs, et d'empêcher les acteurs malintentionnés, par exemple les annonces abusives, de déclencher des actions de partage inattendues.