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

2024-01-03

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

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


令人兴奋的消息!向 webkit 团队提交错误后here https://bugs.webkit.org/show_bug.cgi?id=197779,这个问题已经引起了一些关注,并且正如错误讨论中所指出的,这个最初的实现是经过深思熟虑的。值得庆幸的是,这个问题已经得到解决,最新的 Safari 技术预览版发行说明中包含了这段令人兴奋的段落:

“添加了对用户手势的支持,即使在以下情况下也允许使用 Web Share API: 在 XHR 调用之前”https://developer.apple.com/safari/technology-preview/release-notes/ https://developer.apple.com/safari/technology-preview/release-notes/

期待它很快出现在 Safari 的其他部分!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI? 的相关文章

  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • 为什么 length 是 `Array` 的属性而不是 `Array.prototype` 链

    所以我在 V8 控制台上玩了很多 我做到了 Object getOwnPropertyNames 我期望得到 结果 然而 length 所以这意味着不是成为原型链的一部分 length是所有人的成员财产Array对象 这是一个错误 还是有任
  • 从控制台检查 chrome 版本

    有没有办法从控制台检测 Google Chrome 的版本 我知道我可以解析用户代理字符串 但我更喜欢更简洁的方式 这是我目前拥有的 var uaStr navigator userAgent toLowerCase var index u
  • 确定元素是在页面折叠上方还是下方

    我有一些页面有多个输入框 用户可以在其中输入文本 在单击 下一步 按钮之前 需要填写其中一些内容 我弹出验证错误供用户查看 但是如果问题不在页面上 我希望页面滚动到它 而不是他们必须搜索丢失 错误的字段 我有一个滚动到位 但我无法确定要滚动
  • iOS 解决方法:在没有 CSS 属性的情况下平滑滚动 滚动行为:平滑?

    编辑 我找到了一个 jQuery 解决方案 https codepen io chriscoyier pen dpBMVP https codepen io chriscoyier pen dpBMVP这个确实可以在 iOS 上运行 我想
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • jQM / jquery-collagePlus 使用问题

    我正在使用 jQM 构建应用程序 并且尝试使用 jquery collagePlus http ed lea github io jquery collagePlus http ed lea github io jquery collage
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • @font-face 和 font-variant 是个坏主意吗?

    如果我使用 font face字体和font variant small caps对于相同的选择器 字体将回退到 Safari 中的下一个系统默认字体 我该如何解决这个问题 我一开始在创建一个示例来复制您的问题时遇到了一些麻烦 这让我意识到
  • Ember Data 中出现“超出最大调用堆栈大小”错误的原因可能是什么?

    Ember 发布新版本 3 6 0 后 我开始在控制台中收到错误 rsvp js 24 未捕获 RangeError 超出最大调用堆栈大小 在 WeakMap get 在 getCacheFor metal js 25 在 Computed
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • 强制输入数字小数位

    我想强制
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐

  • 声明时没有实例化对象的原因是什么?

    最近我不得不深入研究一些 VB6 代码 我到处都看到了这种模式 dim o as obj set o new obj 为什么不是这个 dim o as new obj 我记得15年前有一个很好的理由 但现在我不记得是什么了 有人记得吗 理由
  • 检查元素是否为 div

    我如何检查是否 this is a div ul or blockquote 例如 if this is a div alert its a div else alert its not a div some other stuff 像这样
  • 蒙古人名的处理

    有几个国家 土耳其 蒙古 吉尔吉斯斯坦等 通常男性的名字可以没有中间名 而是使用 oglu uulu 等词代替 例如 Michael oglu Bret 意思是 布雷特的迈克尔儿子 我曾经把这类词分开 并把它们当作中间名 所以在过去的一周里
  • 在画布绘图上设置触摸监听器

    假设我在画布上绘制了位图图像或简单的圆圈 如何设置 OnTouchListener 来检查我的绘图是否被触摸 由于我将在画布上绘制多个圆圈 因此我希望每个圆圈都有一些唯一的 ID 以便我可以相应地工作 当您触摸屏幕时 获取 x 和 y 坐标
  • C# 和 SIMD:高加速和低加速。怎么了?

    问题介绍 我正在尝试加快我正在编写的 2d 光线追踪器的相交代码 我使用 C 和 System Numerics 库来提高 SIMD 指令的速度 问题是我得到了奇怪的结果 有超顶加速和相当低的加速 我的问题是 为什么一个是在屋顶之上 而另一
  • 计算多部分/表单数据编码文件的大小

    我正在编写一个应该接收文件并存储它的应用程序 一种存储方式是将其上传到另一台服务器 例如 filehoster 服务器端我使用Python和金字塔框架 我已经解决了客户端上传时获取文件的问题 并包装了返回的应用程序make wsgi app
  • CSS:居中块,但内容向左对齐

    我希望整个块位于其父级的中心 但我希望块的内容左对齐 例子最有效 在本页 ascii 艺术应该居中 正如它所显示的那样 但它应该对齐并且看起来像 YAML 或这个 http yaml online parser appspot com ya
  • C++对象构造方法之间的区别

    C 中不同的构造语法总是让我有点困惑 在另一个问题 https stackoverflow com questions 48255276 why does stdstring x00 report length of 0 48255303
  • java.lang.NoClassDefFoundError: android/graphics/drawable/Icon

    到目前为止 我仅对一位使用 root 手机 SM G900R7 Android 4 4 2 的用户遇到此错误 错误是这样的 Fatal Exception java lang NoClassDefFoundError android gra
  • 在 C#/WPF 中获取 PathGeometry(行)的长度

    如果我有一条闭合路径 我可以使用Geometry GetArea 来近似我的形状的面积 这太棒了 节省了我很多时间 但是周围有什么东西可以帮助我找到一条未闭合路径的长度吗 我现在能想到的最好办法就是确保我正在使用PathGeometry并致
  • 如何使用 PCL 读取 .ply 文件

    我可以使用这个程序读取 pcd 数据 include
  • Python 字符串不区分大小写

    我知道您可以使用 ctypes 库对字符串执行不区分大小写的比较 但是我也想执行不区分大小写的替换 目前我知道做到这一点的唯一方法是使用正则表达式 通过它来做到这一点似乎有点糟糕 Replace 是否有不区分大小写的版本 您可以将标志 re
  • 使用 Python 的“子进程”运行“导出”命令不起作用

    subprocess run export FOO BAR shell True 这根本行不通 我不知道为什么 我想做的就是从 python 3 5 1 脚本中设置一个环境变量 当我运行上面的行时 什么也没有发生 没有引发任何错误 当我自己
  • 如何在Python中返回递归函数的列表

    我试图从函数返回一个字符串列表 该函数计算没有连续 0 的所有可能排列 为此 我正在运行一个有效的递归函数 但我需要创建一个包含结果的列表 Function to print all n digit binary strings witho
  • 如何在 C# 中将 HTML 设置为剪贴板?

    我想将 HTML 格式的富文本放在剪贴板上 这样当用户粘贴到 Word 时 它将包含源 HTML 格式 Using the Clipboard SetText method http msdn microsoft com en us lib
  • 过时的 Kotlin 运行时

    当我想更新 kotlin 运行时时收到此消息 kotlin stdlib 1 1 2 4 库中的 Kotlin 运行时版本是 1 1 2 4 而插件版本是 1 1 3 release Studio 3 0 2 应更新运行时库以避免兼容性问题
  • 在 matplotlib 中将图形尺寸设置为大于屏幕尺寸

    我正在尝试创建数字matplotlib这在期刊文章中读起来很好 我有一些较大的图形 带有子图形 我想在纵向模式下占据几乎整个页面 具体来说 6 5 x9 对于美国信纸上具有 1 边距的整页图形 我可以设置轻松调整图形尺寸figsize范围
  • R 中可以有多行注释吗? [复制]

    这个问题在这里已经有答案了 我找到了这个旧线程 http r 789695 n4 nabble com How to comment in R tt882882 html none 一年多前 这解释了为什么 R 不支持多行注释 例如 PHP
  • Entity Framework 4 加载并包含组合

    如果我有 3 张表 表1 表2 表3 并且Table3有一个针对Table2的FK 而Table2也有一个针对Table1的FK 然后我像这样加载我的对象 using Entities entities new Entities Table
  • 如何在 Safari 中使用 AJAX 调用之前的 WebShareAPI?

    当用户单击我们的付费网站上的共享按钮时 我们会通过异步调用生成一个令牌 该令牌允许人们单击共享链接绕过付费墙 我添加了对 Web Share API 的支持 在触发之前首先调用令牌navigator share 沿着这些思路 fetchCa