当用户单击我们的付费网站上的共享按钮时,我们会通过异步调用生成一个令牌,该令牌允许人们单击共享链接绕过付费墙。
我添加了对 Web Share API 的支持,在触发之前首先调用令牌navigator.share
- 沿着这些思路:
fetchCallForLink()
.then((url) => {
navigator.share({
title: 'Test Title',
url,
});
这在支持网络共享的 Chrome / Android 上运行良好。
但是在 Safari 上,我收到了不允许的错误。
The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission
(这只发生在第一次共享尝试时,因为我将响应保存到窗口,因此在后续单击时,它避免了 AJAX 调用并且工作得很好。)
由于我们拥有的读者数量以及实际使用共享选项的人数很少,因此每次页面加载时都进行 AJAX 调用(与仅当用户表达共享意图时相比)的成本会很高。
由于这在 Chrome 中工作得很好,我假设规范中没有任何内容禁止在启动 Web Share 之前进行 AJAX 调用。
这可能是 Safari 实现中的一个错误吗?或者相反,实际上 Chrome 不应该允许?
例子:https://mkonikov.com/web-share-testing/ https://mkonikov.com/web-share-testing/我添加了一个切换开关来共享或不首先获取。仅当启用提取时,此共享才会失败。 (还值得注意的是,共享将会失败,并显示setTimeout
超过1000ms)
Update:我在这里与 web-kit 团队创建了一个错误:https://bugs.webkit.org/show_bug.cgi?id=197779 https://bugs.webkit.org/show_bug.cgi?id=197779.
Update 2:这是 W3C 一些人的相关 Twitter 帖子https://twitter.com/marcosc/status/1167607222009884672 https://twitter.com/marcosc/status/1167607222009884672