首页 > 解决方案 > 为什么 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 上测试它。

标签: javascriptecmascript-6fetches6-promisenavigator

解决方案


我认为这个问题来自这个要求:

必须调用它以响应用户操作,例如单击。通过 onload 处理程序调用它是不可能的。( https://web.dev/web-share/ )

如果您直接从点击事件中分享它似乎没问题。如果您在回调/承诺之后共享,则不行 - 如果此承诺/回调函数是从单击事件调用的事件(至少在 iOS 上)。浏览器应该在调用堆栈中看到用户操作。

我也遇到过这个。我认为它的行为更像是一个错误而不是一个功能,因为它阻止了动态共享的可能性。

解决方案:要共享的数据必须在实际共享时可用。因此,您可能需要显示另一个按钮或其他任何内容来共享您获取的数据。


推荐阅读