Intégrer l'UI de partage du système d'exploitation avec l'API Web Share

Les applications Web peuvent utiliser les mêmes fonctionnalités de partage fournies par le système que les applications spécifiques à la plate-forme.

Joe Medley
Joe Medley

Avec l'API Web Share, les applications Web peuvent utiliser les mêmes fonctionnalités de partage fournies par le système que les applications spécifiques à la plate-forme. L'API Web Share permet aux applications Web de partager des liens, du texte et des fichiers avec d'autres applications installées sur l'appareil de la même manière que les applications spécifiques à la plate-forme.

Sélecteur de cible de partage au niveau du système avec une PWA installée en option.
Sélecteur de cible de partage au niveau du système avec une PWA installée en option.

Fonctionnalités et limites

Le partage Web présente les fonctionnalités et les limites suivantes :

  • Il ne peut être utilisé que sur un site auquel on accède via HTTPS.
  • Si le partage se produit dans un iframe tiers, l'attribut allow doit être utilisé.
  • Il doit être appelé en réponse à une action de l'utilisateur, comme un clic. Il est impossible de l'appeler via le gestionnaire onload.
  • Il peut partager des URL, du texte ou des fichiers.

Navigateurs pris en charge

  • Chrome : 89.
  • Edge : 93.
  • Firefox: derrière un drapeau.
  • Safari : 12.1.

Source

Pour partager des liens et du texte, utilisez la méthode share(), qui est une méthode basée sur des promesses avec un objet de propriétés obligatoire. Pour empêcher le navigateur de générer une erreur TypeError, l'objet doit contenir au moins l'une des propriétés suivantes: title, text, url ou files. Vous pouvez, par exemple, partager du texte sans URL ou inversement. Autoriser ces trois membres augmente la flexibilité des cas d'utilisation. Imaginons qu'après avoir exécuté le code ci-dessous, l'utilisateur ait choisi une application de messagerie comme cible. Le paramètre title peut devenir l'objet de l'e-mail, le text, le corps du message et les fichiers, les pièces jointes.

if (navigator.share) {
  navigator.share({
    title: 'web.dev',
    text: 'Check out web.dev.',
    url: 'https://web.dev/',
  })
    .then(() => console.log('Successful share'))
    .catch((error) => console.log('Error sharing', error));
}

Si votre site comporte plusieurs URL pour le même contenu, partagez l'URL canonique de la page plutôt que l'URL actuelle. Au lieu de partager document.location.href, vous devez rechercher une balise <meta> d'URL canonique dans le <head> de la page et la partager. Cela offrira une meilleure expérience à l'utilisateur. Non seulement cela évite les redirections, mais il garantit également qu'une URL partagée propose une expérience utilisateur correcte à un client particulier. Par exemple, si un ami partage une URL mobile et que vous la consultez sur un ordinateur de bureau, vous devriez voir une version pour ordinateur:

let url = document.location.href;
const canonicalElement = document.querySelector('link[rel=canonical]');
if (canonicalElement !== null) {
    url = canonicalElement.href;
}
navigator.share({url});

Partager des fichiers

Pour partager des fichiers, commencez par tester et appeler navigator.canShare(). Incluez ensuite un tableau de fichiers dans l'appel de navigator.share() :

if (navigator.canShare && navigator.canShare({ files: filesArray })) {
  navigator.share({
    files: filesArray,
    title: 'Vacation Pictures',
    text: 'Photos from September 27 to October 14.',
  })
  .then(() => console.log('Share was successful.'))
  .catch((error) => console.log('Sharing failed', error));
} else {
  console.log(`Your system doesn't support sharing files.`);
}

Notez que l'exemple gère la détection de caractéristiques en testant navigator.canShare() plutôt que navigator.share(). L'objet de données transmis à canShare() n'est compatible qu'avec la propriété files. Certains types de fichiers audio, image, PDF, vidéo et texte peuvent être partagés. Pour obtenir la liste complète, consultez Extensions de fichiers autorisées dans Chromium. D'autres types de fichiers pourront être ajoutés à l'avenir.

Partage dans des iFrames tiers

Pour déclencher l'action de partage à partir d'un iframe tiers, incorporez l'iframe avec l'attribut allow et une valeur de web-share :

<!-- On https://example.com/index.html -->
<iframe allow="web-share" src="https://third-party.example.com/iframe.html"></iframe>

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, une NotAllowedError avec le message Failed to execute 'share' on 'Navigator': Permission denied s'affichera.

Étude de cas Sur la piste du père Noël

Application Sur la piste du Père Noël avec un bouton de partage.
Bouton de partage de l'application Sur la piste du père Noël.

Sur la piste du Père Noël, un projet Open Source, est une tradition de fin d'année chez Google. Chaque mois de décembre, vous pouvez célébrer la saison avec des jeux et des expériences éducatives.

En 2016, l'équipe Sur la piste du père Noël a utilisé l'API Web Share sur Android. Cette API était parfaite pour les mobiles. Les années précédentes, l'équipe avait supprimé les boutons de partage sur mobile, car l'espace était limité et l'équipe ne pouvait pas justifier d'avoir plusieurs cibles de partage.

Mais avec l'API Web Share, ils ont pu présenter un seul bouton, ce qui leur a permis d'économiser de précieux pixels. Elle a également constaté que les utilisateurs partageaient avec Web Share environ 20 % plus que les utilisateurs sans l'API activée. Accédez à Sur la piste du Père Noël pour voir le partage Web en action.

Prise en charge des navigateurs

La compatibilité du navigateur avec l'API Web Share est nuancée. Nous vous recommandons d'utiliser la détection de fonctionnalités (comme décrit dans les exemples de code précédents) au lieu de supposer qu'une méthode particulière est compatible.

Voici un aperçu de la prise en charge de cette fonctionnalité. Pour en savoir plus, cliquez sur l'un des liens d'aide.

navigator.canShare()

Navigateurs pris en charge

  • Chrome : 89.
  • Edge : 93.
  • Firefox : derrière un indicateur.
  • Safari: 14.

Source

navigator.share()

Navigateurs pris en charge

  • Chrome: 89
  • Edge: 93
  • Firefox : derrière un indicateur.
  • Safari : 12.1.

Source

Afficher la compatibilité avec l'API

Prévoyez-vous d'utiliser l'API Web Share ? Votre soutien public aide l'équipe Chromium à hiérarchiser les fonctionnalités et montre aux autres fournisseurs de navigateurs à quel point il est essentiel de les prendre en charge.

Envoyez un tweet à @ChromiumDev en utilisant le hashtag #WebShare et indiquez-nous où et comment vous l'utilisez.