小编Men*_*del的帖子

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

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

我添加了对 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 毫秒)


更新 …

javascript safari google-chrome navigator web

6
推荐指数
1
解决办法
693
查看次数

标签 统计

google-chrome ×1

javascript ×1

navigator ×1

safari ×1

web ×1