javascript - 如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI?

标签 javascript google-chrome web safari navigator

当用户点击我们付费专区网站上的分享按钮时,我们会通过异步调用生成一个 token ,允许点击分享链接的人绕过付费专区。

我添加了对 Web Share API 的支持,在触发 navigator.share 之前首先调用 token - 沿着这些思路:

fetchCallForLink()
  .then((url) => {
    navigator.share({
      title: 'Test Title',
      url,
    });


这在支持 Web Share 的 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 共享之前禁止 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 团队提交错误后 here ,这个问题已经引起了一些关注,正如错误讨论中所指出的,这个初始实现是经过深思熟虑的。谢天谢地,这个问题已经得到修复,最新的 Safari 技术预览版发布说明包括这个令人兴奋的段落:

"Added support for a user gesture to allow using the Web Share API even when preceded by an XHR call" https://developer.apple.com/safari/technology-preview/release-notes/



期待它很快进入 Safari 的其余部分!

关于javascript - 如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56046434/

相关文章:

javascript - 如何在 block 显示中调整图像大小? (javascript 或 react )

JavaScript Date() 返回无效日期

javascript - 对象的属性名称如何存储在 Javascript 中?

google-chrome - 首先按日期对 Chrome 书签进行排序

javascript - 从多个类中移除属性

javascript - 使用 chrome 开发人员工具在 html 页面中编辑嵌入式 Javascript

wordpress - Nivo slider 未加载

PHP 路径位置

java - Java Web App推荐的项目结构

javascript - 键盘代码 229。无法与 PreventDefault 一起使用