网易首页 > 网易号 > 正文 申请入驻

Web上的分享(Share)API

0
分享至

我认为Web Share API非常酷,简而言之,它会利用您所使用的平台上的原生共享功能(如果该平台支持的话)。

我喜欢这个:

远远不止这些东西:

为什么?

Web Share API只是几行代码。简单!没有图像,没有重量级的JavaScript或iframe。

用户看到的UI是针对其平台定制的,甚至可能是由他们定制的,以在其中包含他们想要的东西。

好样的,Web标准。

但并不是所有地方都支持。例如,我在Chrome浏览器中写这篇博客文章,在桌面Chrome浏览器中无法使用,但在桌面的Safari中却可以工作

所以,如果我要使用它,我宁愿在把按钮放在页面上之前先测试一下是否支持。这是非常简单的:

if (navigator.share) {
}

下面是一个例子,如果API被支持的话,我把一个放在文章上,HTML和CSS省略。

JavaScript做了一些花哨的动作来获取文章的标题和第一段,以便在API中使用。我喜欢Jeremy Keith在页面上的做法:

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')
}
);
}

你也可以将字符串传递给这些值,这只是在展示你如何在任何页面上动态地做一些工作。

Jeremy也一直在倡导建立一个JavaScript可选的Web Share API版本,他认为可以像这样工作。

然后,指定标题和文本:

用逗号对我来说有点时髦,如果标题中包含逗号怎么办?那指定URL呢?我们可以将它们全部分成属性吗?我想我知道Jeremy会说什么:这是一个简单的声明性版本,如果你想改变默认行为,那就是JavaScript的作用。

如何使用Web Share API

自从在Android的Chrome 61中首次引入以来,Web Share API似乎已经受到关注。从本质上讲,它提供了一种方法,当直接从网站或Web应用程序分享内容时,可以触发设备(或桌面,如果使用Safari)的本地分享对话框,例如链接或联系卡。

虽然用户已经可以通过原生方式分享网页上的内容,但他们必须在浏览器菜单中找到这个选项,即使如此,也无法控制分享的内容。该API的引入让开发者可以利用用户设备上的原生内容分享功能,将分享功能添加到应用或网站中。

与传统方法相比,这种方法具有许多优势:

与你在DIY实现中可能拥有的有限数量的内容相比,用户将获得广泛的内容分享选择。

你可以通过删除各个社交平台上的第三方脚本来缩短页面加载时间。

你不需要为不同的社交媒体网站和电子邮件添加一系列按钮,一个按钮就足以触发设备的原生分享选项。

用户可以在自己的设备上定制自己喜欢的分享目标,而不是仅仅局限于预定义的选项。

关于浏览器支持的说明

在介绍API的工作细节之前,我们先把浏览器支持的问题解决掉。说实话,目前浏览器的支持度并不高。它只适用于Android版Chrome浏览器,以及Safari(桌面和iOS)。

但不要因此而不愿意在网站上采用这个API。要实现一个支持不提供支持的浏览器的后备功能是很容易的,你会看到的。

使用它的一些要求

在您自己的Web项目上采用此API之前,需要注意两点:

您的网站必须通过HTTPS提供服务。为了促进本地开发,当您的站点通过localhost运行时,该API也可以使用。

为了防止滥用,API只能在响应一些用户操作(如点击事件)时触发。

这是一个例子

为了演示如何使用这个API,我准备了一个demo,它的工作原理与我的网站上的工作原理基本相同。该示例使用DIY方式,自己自定义分享对话框。

此时,一旦点击分享按钮,就会弹出一个对话框,显示出分享内容的几个选项,这是代码的一部分,可帮助我们实现这一目标:

shareButton.addEventListener('click', event => {
shareDialog.classList.add('is-open');
});

让我们继续进行示例转换,以改为使用Web Share API。首先要做的是检查用户的浏览器是否确实支持该API,如下所示:

if (navigator.share) {
// Web Share API is supported
} else {
// Fallback
}

使用Web Share API就像调用 navigator.share() 方法并传递一个至少包含以下字段之一的对象一样简单。

url:一个字符串,代表要共享的URL。通常是文档的网址,但不是必须的。您可以通过Web Share API共享任何URL。

title:表示要共享的标题的字符串,通常是 document.title。

text:您要包括的任何文本。

实际情况如下:

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
}
});

这时,一旦在支持的浏览器中点击分享按钮,原生选取器就会弹出所有用户可以分享数据的可能目标。目标可以是社交媒体应用、电子邮件、即时通讯、短信或其他注册分享目标。

API是基于Promise的,所以你可以附加一个 .then() 方法,以便在共享成功时显示成功消息,并使用 .catch() 处理错误。。在实际情况下,您可能希望使用以下代码段获取页面的标题和URL:

const title = document.title;
const url = document.querySelector('link[rel=canonical]') ? document.querySelector('link[rel=canonical]').href : document.location.href;

对于URL,我们首先检查该页面是否有一个规范的URL,如果有,就使用它。否则,我们从 document.location 中抓取 href。

提供后备方案是个好主意

在不支持Web Share API的浏览器中,我们需要提供一种后备机制,以便那些浏览器上的用户仍然可以使用一些共享选项。

在上面的DIY例中,我们弹出一个对话框,其中有一些用于共享内容的选项,并且演示中的按钮实际上并没有链接到任何地方,因为这是一个演示。但是,如果您想了解如何在不使用第三方脚本的情况下创建自己的链接来共享网页,那么Adam Coti的文章就是一个不错的起点。

我们要做的是在不支持Web Share API的浏览器上为用户显示后备对话框。这就像将打开共享对话框的代码移到 else 块中一样简单:

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');
}
});

现在,无论使用哪种浏览器,所有用户都将受到覆盖。以下是分享按钮在两个移动浏览器上的表现比较,一个是支持Web Share API,另一个是不支持。

试试吧!使用支持Web Share的浏览器和不支持的浏览器。它的工作原理应该与上面的演示类似。

结束

这几乎涵盖了您需要了解的有关Web Share API的基本内容。通过在您的网站上实施它,访问者可以在更广泛的社交网络上更容易地与联系人和其他原生应用程序分享您的内容。

另外值得注意的是,如果你的Web应用符合WPA Web应用安装标准,你能够将其添加为共享目标,并添加到用户的主屏幕上。Web Share Target API的此功能,您可以在Google Developers上了解。

尽管对浏览器的支持不多,但回退很容易实现,因此我认为没有理由不采用这种方式。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一针下去,癌细胞“断子绝孙”,瑞金医院这招太绝了!

一针下去,癌细胞“断子绝孙”,瑞金医院这招太绝了!

新时代的两性情感
2026-06-12 09:57:36
37天,二胖躺在大衣哥朱之文家门口,整整37天。

37天,二胖躺在大衣哥朱之文家门口,整整37天。

阿振观点
2026-06-08 12:23:52
随着尼克斯时隔52年夺冠 还有哪些球队无冠时间更长 榜首已有74年

随着尼克斯时隔52年夺冠 还有哪些球队无冠时间更长 榜首已有74年

大卫的篮球故事
2026-06-14 15:02:14
为什么往死里扫黄?网友分享太真实了,一次说透

为什么往死里扫黄?网友分享太真实了,一次说透

另子维爱读史
2026-05-27 20:16:03
陪领导接贵宾,发现竟是自家保姆,领导喊“刘董”我大气不敢出

陪领导接贵宾,发现竟是自家保姆,领导喊“刘董”我大气不敢出

晓艾故事汇
2026-06-12 14:21:25
江苏大中小学放假时间定了!

江苏大中小学放假时间定了!

最江阴
2026-06-14 08:47:57
摩洛哥足协主席:希望决赛遇到亚马尔,看看他的选择是否正确

摩洛哥足协主席:希望决赛遇到亚马尔,看看他的选择是否正确

懂球帝
2026-06-14 21:52:21
破案!决赛福克斯低迷米奇不愿换人,原因找到,马刺球迷一语道破

破案!决赛福克斯低迷米奇不愿换人,原因找到,马刺球迷一语道破

啊哒体育
2026-06-15 03:11:21
巴拉圭胸神拉里萨,16年后转型记者,41岁再度亮相世界杯

巴拉圭胸神拉里萨,16年后转型记者,41岁再度亮相世界杯

仙味少女心
2026-06-14 18:47:17
18岁中场天才世界杯一战爆红,标价高达7000万欧,4豪门依旧疯抢

18岁中场天才世界杯一战爆红,标价高达7000万欧,4豪门依旧疯抢

零度眼看球
2026-06-15 07:28:24
卡迪奥卢:以这样的方式开启世界杯深感抱歉;我们会尽快调整

卡迪奥卢:以这样的方式开启世界杯深感抱歉;我们会尽快调整

懂球帝
2026-06-14 16:44:57
传国玉玺的下落,史书已经给过“暗示”,大概率就在这两个地方!

传国玉玺的下落,史书已经给过“暗示”,大概率就在这两个地方!

掠影后有感
2026-06-14 10:05:50
伊朗真大意了!穆杰塔巴仍在暗杀名单,却突然公开行程

伊朗真大意了!穆杰塔巴仍在暗杀名单,却突然公开行程

新时代精神
2026-06-15 08:44:00
2亿欧,亚马尔身价超两支世界杯东道主球队全队身价

2亿欧,亚马尔身价超两支世界杯东道主球队全队身价

懂球帝
2026-06-12 22:06:20
马科斯终于等到这天,国际刑事法院正式裁定,杜特尔特真的危险了

马科斯终于等到这天,国际刑事法院正式裁定,杜特尔特真的危险了

章媸解说体育
2026-06-14 16:54:55
三年前发现鹅腿阿姨卖鸭腿的第一位网友终于找到了

三年前发现鹅腿阿姨卖鸭腿的第一位网友终于找到了

大张的自留地
2026-06-12 19:26:49
北京偶遇朱珠接女儿放学!5岁珠宝自己背书包,网友:这是真富养

北京偶遇朱珠接女儿放学!5岁珠宝自己背书包,网友:这是真富养

一口娱乐
2026-06-15 00:48:44
最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

最高院:提供 “口交” “肛交”等进入式性服务,是否属卖淫行为?

周军律师聊案子
2026-04-21 09:50:16
世界杯奇葩一幕,非亚洲队的亚足联球队赢了非亚足联球队的亚洲队

世界杯奇葩一幕,非亚洲队的亚足联球队赢了非亚足联球队的亚洲队

第五才子
2026-06-14 14:39:56
遇见小面CEO公开道歉!将赠送渝见小面商标

遇见小面CEO公开道歉!将赠送渝见小面商标

鞭牛士
2026-06-15 08:39:12
2026-06-15 09:27:01
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 823关注度
往期回顾 全部

科技要闻

外媒体验新版Siri:苹果AI危机暂时缓过来了

头条要闻

楼下饭店疑拆承重墙 上海男子一投诉就遭深夜上门辱骂

头条要闻

楼下饭店疑拆承重墙 上海男子一投诉就遭深夜上门辱骂

体育要闻

8年8队夺冠,邓肯那句话,现在还给了马刺

娱乐要闻

邓超携子观战NBA,等等帅气十足

财经要闻

美伊达成和平协议!油价大跌 黄金反弹

汽车要闻

狂欢置换价7.99万 第三代豪越L欢乐PLUS大7座版上市

态度原创

亲子
艺术
房产
游戏
旅游

亲子要闻

你们知道海洋霸主是谁吗?

艺术要闻

218米!建行最大的独栋办公楼,和农行长得一模一样!

房产要闻

海南最赚钱行业曝光!最快4年半,海口全款买三房!

《异度神剑:创世》新截图 游戏将于2027年发售

旅游要闻

渝见好“村”光|万州区七曜村:云海七曜 十里风车

无障碍浏览 进入关怀版