Ich finde die Web Share API sehr cool (hier ist unsere Berichterstattung). Kurz gesagt, sie greift auf die nativen Sharing-Funktionen der jeweiligen Plattform zu, sofern diese unterstützt werden.
Das gefällt mir

Viel mehr als diese Dinge

Warum?
- Die Web Share API besteht aus nur wenigen Codezeilen. Einfach! Keine Bilder, kein schwerfälliger JavaScript oder Iframes, keine Gefahr, veraltet zu sein (hust, Google+).
- Die Benutzeroberfläche, die die Benutzer sehen, ist an ihre Plattform angepasst und vielleicht sogar *von ihnen* so angepasst, dass die Dinge enthalten sind, die sie wollen.
Gut gemacht, Web-Standards.
Aber sie wird nicht überall unterstützt. Ich schreibe diesen Blogbeitrag zum Beispiel in Chrome, und er funktioniert nicht im Desktop-Chrome. Aber er funktioniert im Desktop-Safari!

Wenn ich sie also verwenden möchte, teste ich lieber zuerst die Unterstützung, bevor ich den Button auf eine Seite setze. Das ist sehr einfach
if (navigator.share) {
}
Hier ist ein Beispiel, bei dem ich einen <button> in einen Artikel einfüge, falls die API unterstützt wird
Das JavaScript macht ein paar schicke Tanzschritte, um den Titel und den ersten Absatz des Beitrags zu extrahieren, die in der API verwendet werden. Ich mag, wie Jeremy Keith es auf Seitenebene macht
if (navigator.share) {
navigator.share(
{
title: document.querySelector('title').textContent,
text: document.querySelector('meta[name="description"]').getAttribute('content'),
url: document.querySelector('link[rel="canonical"]').getAttribute('href')
}
);
}
Man könnte auch einfach Zeichenketten für diese Werte übergeben. Das zeigt nur, wie man dynamisch Dinge tun könnte, die auf jeder Seite funktionieren.
Jeremy beschäftigt sich auch damit, eine JavaScript-optionale Version der Web Share API zu befürworten, die seiner Meinung nach so funktionieren könnte
<button type="share">
Und dann, zur Angabe von Titel und Text
<button type="share" value="title,text">
Das kommt mir ein bisschen seltsam vor, mit dem Komma. Was, wenn der Titel ein Komma enthält? Und was ist mit der Angabe der URL? Könnten wir sie alle in Attribute aufteilen? Ich glaube, ich weiß, was Jeremy sagen würde: Das ist eine einfache deklarative Version. Wenn Sie das Standardverhalten ändern möchten, dafür gibt es JavaScript.
Aber sollte es überhaupt da sein, wenn der Browser es nicht unterstützt? Na klar, wenn Sie Polyfillen
Dieses Polyfill wandelt den Button in ein mailto:-Erlebnis um, wenn er nicht unterstützt wird. Das ist ziemlich clever. Ich glaube, wenn ich produktionsreif wäre, würde ich den Button wahrscheinlich nur einfügen, wenn die Funktion wirklich unterstützt wird.
Woah, woah, woah! Die Verwendung des `value`-Attributs für Titel und Text war nur ein Geistesblitz von mir. Ich habe diese Idee ziemlich schnell wieder verworfen – wie Sie sagen, es ist etwas seltsam. Ich habe eine Erklärung für die Idee von
button type="share"geschrieben, und das `value`-Attribut kommt darin nicht vor. Titel und URL werden vom Browser gesammelt (auf die gleiche Weise, wie sie sie für Lesezeichen sammeln).Ich benutze die Web Share API ziemlich häufig in meinen Angular-Projekten. Ich habe nur eine Sorge: Desktop Chrome :(
Nikhil, würdest du deine Anwendungsfälle hier teilen?
„vielleicht sogar von ihnen angepasst“
Ich wünschte… das Share-Menü ist ein komplettes Durcheinander
Es fällt mir schwer, Videos von einer Veranstaltung zu übertragen. 1,9 GB
Unter dem Desktop, um zu prüfen, ob der Button erscheint, kann das Chrome-Flag unter chrome://flags/#enable-experimental-web-platform-features gesetzt werden
Es wird nur der Button angezeigt, der auf dem Mobilgerät erscheint, aber es gibt keine Aktion.
Ich bin anders mit Inkompatibilitäten umgegangen, mehr unter -> ShareButton.js
Scheint auf Firefox Mobile nicht zu funktionieren, obwohl das letzte Fenix-Update viele Dinge kaputt gemacht hat, was keine Überraschung ist.
Auf Firefox erscheint der Share-Button, aber es passiert nichts, wenn man darauf tippt.
Ich verfolge Ihre Website seit Jahren und die Web Share API seit einigen Monaten. Sie ist eine großartige Verbesserung für die mobile UX und wird hoffentlich noch besser, wenn Safari iOS die Dateifreigabe über die Web Share API standardmäßig aktiviert, sie ist in Chrome Mobile aktiviert. Unsere Welt dreht sich um Medien, und Apple hat die Dateifreigabe in der neuesten Safari 14-Aktualisierung standardmäßig deaktiviert.
Wie immer, ein großartiger Artikel, Chris :)
Ich habe seit einer Weile mit dieser API herumgespielt und aufgrund desselben Problems, sie nicht auf Desktops nutzen zu können, habe ich dieses Polyfill erstellt
https://www.npmjs.com/package/share-api-polyfill
Es ist am Ende ziemlich klein und funktioniert reibungslos auf Desktops und Mobilgeräten (unter Verwendung der nativen API, wann immer sie verfügbar ist).
Es unterstützt auch mehrere Sprachen und wächst dank Community-PRs :)
Ich habe das Gefühl, dass wir unsere Benutzeroberflächen durch das Hinzufügen all dieser zusätzlichen „Share“-Buttons nur überladen. Ich verstehe, dass einige Benutzer nicht wissen, dass sie auf das Hamburger-Menü tippen und dann auf „Teilen“ gehen müssen, aber ich würde gerne sehen, dass wir uns von all diesen Share-Buttons wegbewegen. Zumindest bringt uns diese API in die richtige Richtung mit einem einheitlicheren Ansatz für das Teilen.
Können Sie mir bitte ein Beispiel geben, wie man ein Bild, das in einem Ordner gespeichert ist, für die Web-Freigabe von Bild und Text verwendet?