新聞中心
我認(rèn)為Web Share API非??幔?jiǎn)而言之,它會(huì)利用您所使用的平臺(tái)上的原生共享功能(如果該平臺(tái)支持的話)。

創(chuàng)新互聯(lián)是一家成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),提供網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,定制網(wǎng)站建設(shè),網(wǎng)站開(kāi)發(fā)公司,從2013年成立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶(hù)品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開(kāi)發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專(zhuān)業(yè)建議和思路。
我喜歡這個(gè):
遠(yuǎn)遠(yuǎn)不止這些東西:
為什么?
- Web Share API只是幾行代碼。簡(jiǎn)單!沒(méi)有圖像,沒(méi)有重量級(jí)的JavaScript或iframe。
- 用戶(hù)看到的UI是針對(duì)其平臺(tái)定制的,甚至可能是由他們定制的,以在其中包含他們想要的東西。
好樣的,Web標(biāo)準(zhǔn)。
但并不是所有地方都支持。例如,我在Chrome瀏覽器中寫(xiě)這篇博客文章,在桌面Chrome瀏覽器中無(wú)法使用,但在桌面的Safari中卻可以工作
所以,如果我要使用它,我寧愿在把按鈕放在頁(yè)面上之前先測(cè)試一下是否支持。這是非常簡(jiǎn)單的:
- if (navigator.share) {
- }
下面是一個(gè)例子,如果API被支持的話,我把一個(gè)
JavaScript做了一些花哨的動(dòng)作來(lái)獲取文章的標(biāo)題和第一段,以便在API中使用。我喜歡Jeremy Keith在頁(yè)面上的做法:
- 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')
- }
- );
- }
你也可以將字符串傳遞給這些值,這只是在展示你如何在任何頁(yè)面上動(dòng)態(tài)地做一些工作。
Jeremy也一直在倡導(dǎo)建立一個(gè)JavaScript可選的Web Share API版本,他認(rèn)為可以像這樣工作。
然后,指定標(biāo)題和文本:
用逗號(hào)對(duì)我來(lái)說(shuō)有點(diǎn)時(shí)髦,如果標(biāo)題中包含逗號(hào)怎么辦?那指定URL呢?我們可以將它們?nèi)糠殖蓪傩詥?我想我知道Jeremy會(huì)說(shuō)什么:這是一個(gè)簡(jiǎn)單的聲明性版本,如果你想改變默認(rèn)行為,那就是JavaScript的作用。
如何使用Web Share API
自從在Android的Chrome 61中首次引入以來(lái),Web Share API似乎已經(jīng)受到關(guān)注。從本質(zhì)上講,它提供了一種方法,當(dāng)直接從網(wǎng)站或Web應(yīng)用程序分享內(nèi)容時(shí),可以觸發(fā)設(shè)備(或桌面,如果使用Safari)的本地分享對(duì)話框,例如鏈接或聯(lián)系卡。
雖然用戶(hù)已經(jīng)可以通過(guò)原生方式分享網(wǎng)頁(yè)上的內(nèi)容,但他們必須在瀏覽器菜單中找到這個(gè)選項(xiàng),即使如此,也無(wú)法控制分享的內(nèi)容。該API的引入讓開(kāi)發(fā)者可以利用用戶(hù)設(shè)備上的原生內(nèi)容分享功能,將分享功能添加到應(yīng)用或網(wǎng)站中。
與傳統(tǒng)方法相比,這種方法具有許多優(yōu)勢(shì):
- 與你在DIY實(shí)現(xiàn)中可能擁有的有限數(shù)量的內(nèi)容相比,用戶(hù)將獲得廣泛的內(nèi)容分享選擇。
- 你可以通過(guò)刪除各個(gè)社交平臺(tái)上的第三方腳本來(lái)縮短頁(yè)面加載時(shí)間。
- 你不需要為不同的社交媒體網(wǎng)站和電子郵件添加一系列按鈕,一個(gè)按鈕就足以觸發(fā)設(shè)備的原生分享選項(xiàng)。
- 用戶(hù)可以在自己的設(shè)備上定制自己喜歡的分享目標(biāo),而不是僅僅局限于預(yù)定義的選項(xiàng)。
關(guān)于瀏覽器支持的說(shuō)明
在介紹API的工作細(xì)節(jié)之前,我們先把瀏覽器支持的問(wèn)題解決掉。說(shuō)實(shí)話,目前瀏覽器的支持度并不高。它只適用于Android版Chrome瀏覽器,以及Safari(桌面和iOS)。
但不要因此而不愿意在網(wǎng)站上采用這個(gè)API。要實(shí)現(xiàn)一個(gè)支持不提供支持的瀏覽器的后備功能是很容易的,你會(huì)看到的。
使用它的一些要求
在您自己的Web項(xiàng)目上采用此API之前,需要注意兩點(diǎn):
- 您的網(wǎng)站必須通過(guò)HTTPS提供服務(wù)。為了促進(jìn)本地開(kāi)發(fā),當(dāng)您的站點(diǎn)通過(guò)localhost運(yùn)行時(shí),該API也可以使用。
- 為了防止濫用,API只能在響應(yīng)一些用戶(hù)操作(如點(diǎn)擊事件)時(shí)觸發(fā)。
這是一個(gè)例子
為了演示如何使用這個(gè)API,我準(zhǔn)備了一個(gè)demo,它的工作原理與我的網(wǎng)站上的工作原理基本相同。該示例使用DIY方式,自己自定義分享對(duì)話框。
此時(shí),一旦點(diǎn)擊分享按鈕,就會(huì)彈出一個(gè)對(duì)話框,顯示出分享內(nèi)容的幾個(gè)選項(xiàng),這是代碼的一部分,可幫助我們實(shí)現(xiàn)這一目標(biāo):
- shareButton.addEventListener('click', event => {
- shareDialog.classList.add('is-open');
- });
讓我們繼續(xù)進(jìn)行示例轉(zhuǎn)換,以改為使用Web Share API。首先要做的是檢查用戶(hù)的瀏覽器是否確實(shí)支持該API,如下所示:
- if (navigator.share) {
- // Web Share API is supported
- } else {
- // Fallback
- }
使用Web Share API就像調(diào)用 navigator.share() 方法并傳遞一個(gè)至少包含以下字段之一的對(duì)象一樣簡(jiǎn)單。
- url:一個(gè)字符串,代表要共享的URL。通常是文檔的網(wǎng)址,但不是必須的。您可以通過(guò)Web Share API共享任何URL。
- title:表示要共享的標(biāo)題的字符串,通常是 document.title。
- text:您要包括的任何文本。
實(shí)際情況如下:
- shareButton.addEventListener('click', event => {
- if (navigator.share) {
- navigator.share({
- title: 'WebShare API Demo',
- url: 'https://codepen.io/ayoisaiah/pen/YbNazJ'
- }).then(() => {
- console.log('Thanks for sharing!');
- })
- .catch(console.error);
- } else {
- // fallback
- }
- });
這時(shí),一旦在支持的瀏覽器中點(diǎn)擊分享按鈕,原生選取器就會(huì)彈出所有用戶(hù)可以分享數(shù)據(jù)的可能目標(biāo)。目標(biāo)可以是社交媒體應(yīng)用、電子郵件、即時(shí)通訊、短信或其他注冊(cè)分享目標(biāo)。
API是基于Promise的,所以你可以附加一個(gè) .then() 方法,以便在共享成功時(shí)顯示成功消息,并使用 .catch() 處理錯(cuò)誤。。在實(shí)際情況下,您可能希望使用以下代碼段獲取頁(yè)面的標(biāo)題和URL:
- const title = document.title;
- const url = document.querySelector('link[rel=canonical]') ? document.querySelector('link[rel=canonical]').href : document.location.href;
對(duì)于URL,我們首先檢查該頁(yè)面是否有一個(gè)規(guī)范的URL,如果有,就使用它。否則,我們從 document.location 中抓取 href。
提供后備方案是個(gè)好主意
在不支持Web Share API的瀏覽器中,我們需要提供一種后備機(jī)制,以便那些瀏覽器上的用戶(hù)仍然可以使用一些共享選項(xiàng)。
在上面的DIY例中,我們彈出一個(gè)對(duì)話框,其中有一些用于共享內(nèi)容的選項(xiàng),并且演示中的按鈕實(shí)際上并沒(méi)有鏈接到任何地方,因?yàn)檫@是一個(gè)演示。但是,如果您想了解如何在不使用第三方腳本的情況下創(chuàng)建自己的鏈接來(lái)共享網(wǎng)頁(yè),那么Adam Coti的文章就是一個(gè)不錯(cuò)的起點(diǎn)。
我們要做的是在不支持Web Share API的瀏覽器上為用戶(hù)顯示后備對(duì)話框。這就像將打開(kāi)共享對(duì)話框的代碼移到 else 塊中一樣簡(jiǎn)單:
- shareButton.addEventListener('click', event => {
- if (navigator.share) {
- navigator.share({
- title: 'WebShare API Demo',
- url: 'https://codepen.io/ayoisaiah/pen/YbNazJ'
- }).then(() => {
- console.log('Thanks for sharing!');
- })
- .catch(console.error);
- } else {
- shareDialog.classList.add('is-open');
- }
- });
現(xiàn)在,無(wú)論使用哪種瀏覽器,所有用戶(hù)都將受到覆蓋。以下是分享按鈕在兩個(gè)移動(dòng)瀏覽器上的表現(xiàn)比較,一個(gè)是支持Web Share API,另一個(gè)是不支持。
試試吧!使用支持Web Share的瀏覽器和不支持的瀏覽器。它的工作原理應(yīng)該與上面的演示類(lèi)似。
結(jié)束
這幾乎涵蓋了您需要了解的有關(guān)Web Share API的基本內(nèi)容。通過(guò)在您的網(wǎng)站上實(shí)施它,訪問(wèn)者可以在更廣泛的社交網(wǎng)絡(luò)上更容易地與聯(lián)系人和其他原生應(yīng)用程序分享您的內(nèi)容。
另外值得注意的是,如果你的Web應(yīng)用符合WPA Web應(yīng)用安裝標(biāo)準(zhǔn),你能夠?qū)⑵涮砑訛楣蚕砟繕?biāo),并添加到用戶(hù)的主屏幕上。Web Share Target API的此功能,您可以在Google Developers上了解。
盡管對(duì)瀏覽器的支持不多,但回退很容易實(shí)現(xiàn),因此我認(rèn)為沒(méi)有理由不采用這種方式。
分享標(biāo)題:Web上的分享(Share)API
分享網(wǎng)址:http://fisionsoft.com.cn/article/dhpsppi.html


咨詢(xún)
建站咨詢(xún)
