Javascript Firefox-document.execCommand(‘;cut’;/‘;copy’;)被拒绝,因为它不是从短时间运行的用户生成的事件处理程序中调用的
我正在开发一个单页应用程序,页面上有一个按钮,当用户单击该按钮时,我想对我的服务器进行ajax调用,然后将返回的值(通过回调)复制到用户的剪贴板 每个组件都独立工作,但当我将它们粘合在一起时,Firefox返回以下错误: document.execCommand('cut'/'copy')被拒绝,因为它不是 从短时间运行的用户生成的事件处理程序内部调用Javascript Firefox-document.execCommand(‘;cut’;/‘;copy’;)被拒绝,因为它不是从短时间运行的用户生成的事件处理程序中调用的,javascript,html,firefox,copy-paste,Javascript,Html,Firefox,Copy Paste,我正在开发一个单页应用程序,页面上有一个按钮,当用户单击该按钮时,我想对我的服务器进行ajax调用,然后将返回的值(通过回调)复制到用户的剪贴板 每个组件都独立工作,但当我将它们粘合在一起时,Firefox返回以下错误: document.execCommand('cut'/'copy')被拒绝,因为它不是 从短时间运行的用户生成的事件处理程序内部调用 我想知道这个错误的具体情况,但网上绝对没有信息;触发此错误的限制条件是什么,是堆栈深度、超时等吗?在firefox上,它只能与单击处理程序一起工
我想知道这个错误的具体情况,但网上绝对没有信息;触发此错误的限制条件是什么,是堆栈深度、超时等吗?在firefox上,它只能与
单击处理程序一起工作,参考我刚刚不得不处理此问题
对我来说,解决方案只是简单地将async设置为false,因为调用速度足够快。您可以使用剪贴板。另一种方法是使用同步。例如:
$.ajax({
method: "GET",
async: false,
url: {your_url},
success: function(res) {
let link= res.link;
let temp_raw = $("<input>");
$("body").append(temp_raw);
temp_raw.val(link);
temp_raw.select();
document.execCommand("copy");
temp_raw.remove();
}
});
$.ajax({
方法:“获取”,
async:false,
url:{你的url},
成功:功能(res){
让link=res.link;
设temp_raw=$(“”);
$(“正文”)。附加(临时原始);
温度原始值(链接);
temp_raw.select();
文件。执行命令(“副本”);
临时原始移除();
}
});
如果清单缺少clipboardWrite权限,Firefox将显示相同的错误消息。一般的想法是,浏览器不希望您操作剪贴板,除非直接响应用户生成的事件(如单击按钮)。但是Ajax调用是异步的,因此当收到响应时,原始的click事件就完成了。您可能会在屏幕上显示结果,同时显示另一个按钮“将结果复制到剪贴板”(或类似按钮)。(这对用户来说也更好,因为它不会在用户没有意识到的情况下覆盖剪贴板。)