我有一个简单的页面,其中包含一些细节,我将通过AJAX请求处理其操作。
在AJAX调用的成功回调中,我试图触发navigator.share
,这给了我一个错误:
NotAllowedError:必须正在处理用户手势以执行共享请求。
一些示例代码如下:
$("#form-button").on('click', function (event) {
var ele = $(this);
event.preventDefault();
$.ajax({
// ...
dataType: "json",
data: { "foo": "bar" },
success: function (response) {
if (navigator.share) {
navigator.share({
title: response.text,
text: response.text,
url: response.href
}).then(function () {
alert('Successful share')
}).catch(function (error) {
alert('Error sharing: ' + error);
});
}
},
});
});
从Google developer site开始的状态:
...您只能调用API来响应用户操作,例如单击(例如,您不能在页面加载过程中调用navigator.share)
如果我没有AJAX调用并在click事件下直接触发navigator.share
,但在我将其放入AJAX回调中时,它不能正常工作。我希望API能够检查事件链。
我必须采取什么替代措施才能使其正常工作?我尝试过保留一个虚拟按钮并触发点击。
答案 0 :(得分:2)
目前 Chromium 似乎对拒绝的数据类型显示了错误的错误消息,例如尝试共享 pdf 文件;也不允许共享 JSON 文件。
Chromium 拒绝“共享”的其他情况也可能给您同样的错误消息。例如,在我的情况下,我在本地测试(file://...)或使用“http”而不是“https”。
看到这条推文,我在那里找到了这个信息: https://twitter.com/daviddalbusco/status/1344641231184396288
允许的文件扩展名列表在那里: https://docs.google.com/document/d/1tKPkHA5nnJtmh2TgqWmGSREUzXgMUFDL6yMdVZHqUsg/
[编辑] 我确认相同的代码在移动 Chrome 上运行良好,但在桌面 Chrome 89 上失败,如下所示:
简而言之,我的回答是:“Chrome 桌面 89 尚未准备好用于 Web Share API”(如果您尝试,它会给您误导性的错误消息)。