Men*_*del 6 javascript safari google-chrome navigator web
当用户点击我们付费墙网站上的分享按钮时,我们会通过异步调用生成一个令牌,允许人们点击分享链接绕过付费墙。
我添加了对 Web Share API 的支持,在触发之前首先调用令牌navigator.share
- 沿着这些路线:
fetchCallForLink()
.then((url) => {
navigator.share({
title: 'Test Title',
url,
});
Run Code Online (Sandbox Code Playgroud)
这在支持 Web 共享的 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/
我添加了一个切换开关,可以先获取或不获取共享。仅当启用提取时,此共享才会失败。(另外值得注意的是,共享将失败setTimeout
超过 1000 毫秒)
更新:我在这里与 web-kit 团队创建了一个错误:https : //bugs.webkit.org/show_bug.cgi?id=197779。
更新 2:这是 W3C 的一些人的相关 Twitter 线程 https://twitter.com/marcosc/status/1167607222009884672
令人兴奋的消息!在向webkit 团队提交错误后,这个问题得到了一些关注,并且正如错误讨论中所述,这个最初的实现是经过深思熟虑的。值得庆幸的是,这个问题已经得到解决,最新的 Safari 技术预览版发行说明中包含了这段令人兴奋的段落:
“添加了对用户手势的支持,即使在 XHR 调用之前也允许使用 Web Share API” https://developer.apple.com/safari/technology-preview/release-notes/
期待它很快出现在 Safari 的其他部分!
归档时间: |
|
查看次数: |
693 次 |
最近记录: |