javascript - 为什么 navigator.share() 不能在 fetch API 中工作?
问题描述
我遇到了一个非常有趣的问题,navigator.share() 在 fetch 之外可以正常工作,但不能在内部正常工作。
作品:
navigator.share({title: '1 Test title', text: '1 Test text'})
不起作用:
fetch('https://api.github.com/orgs/nodejs').then(r => r.json().then(d => {
navigator.share({title: '2 Test title', text: '2 Test text'})
}))
编辑:我目前正在 IOS Safari 和 Chrome 上测试它。
解决方案
我认为这个问题来自这个要求:
必须调用它以响应用户操作,例如单击。通过 onload 处理程序调用它是不可能的。( https://web.dev/web-share/ )
如果您直接从点击事件中分享它似乎没问题。如果您在回调/承诺之后共享,则不行 - 如果此承诺/回调函数是从单击事件调用的事件(至少在 iOS 上)。浏览器应该在调用堆栈中看到用户操作。
我也遇到过这个。我认为它的行为更像是一个错误而不是一个功能,因为它阻止了动态共享的可能性。
解决方案:要共享的数据必须在实际共享时可用。因此,您可能需要显示另一个按钮或其他任何内容来共享您获取的数据。
推荐阅读
- r - 如何在收集功能中排除多列
- proxy - squid透明代理(拦截)+路由器
- c# - 如何维护 Web API 响应结果的状态/队列
- javascript - 如何使用 Javascript 提交 PDF 格式的表单?
- python - 根据两列从最高分的组中选择行
- shell - 如何在txt文件中添加“/1/”作为行号?
- spring-batch - 如何让 Spring Batch 作业在启动时运行而不是按计划运行
- javascript - FullCalendar - eventMouseover 和 eventMouseout 事件不适用于自定义视图
- javascript - 如果 navlink 处于活动状态,则更改状态
- python - pxssh - 使用特定长度的命令无法正确返回输出