Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox-document.execCommand(‘;cut’;/‘;copy’;)被拒绝,因为它不是从短时间运行的用户生成的事件处理程序中调用的_Javascript_Html_Firefox_Copy Paste - Fatal编程技术网

Javascript 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上,它只能与单击处理程序一起工

我正在开发一个单页应用程序,页面上有一个按钮,当用户单击该按钮时,我想对我的服务器进行ajax调用,然后将返回的值(通过回调)复制到用户的剪贴板

每个组件都独立工作,但当我将它们粘合在一起时,Firefox返回以下错误:

document.execCommand('cut'/'copy')被拒绝,因为它不是 从短时间运行的用户生成的事件处理程序内部调用


我想知道这个错误的具体情况,但网上绝对没有信息;触发此错误的限制条件是什么,是堆栈深度、超时等吗?

在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事件就完成了。您可能会在屏幕上显示结果,同时显示另一个按钮“将结果复制到剪贴板”(或类似按钮)。(这对用户来说也更好,因为它不会在用户没有意识到的情况下覆盖剪贴板。)