为什么复制功能在 setTimeout 中不起作用?
Why copy function is not working inside setTimeout?
Chrome 当我尝试在 setTimeout
中 copy
时抱怨。
setTimeout(function () { copy('a') }, 0)
Uncaught ReferenceError: copy is not defined
at <anonymous>:1:26
它也不适用于 window
范围。
setTimeout(function () { window.copy('a') }, 0)
Uncaught TypeError: window.copy is not a function
有趣的是,如果我保留对 copy
的引用并重新使用它,它就会起作用
cc = copy;
setTimeout(function () { cc('a') }, 0);
在 Firefox 中,它不会抛出任何错误,但即使使用已保存的引用也不起作用。
为什么 copy
函数在 setTimeout
中不起作用,这是一个错误吗?
copy
是开发人员工具 Command Line API 的一部分,在浏览器控制台之外不可用。例如,尝试在作为普通网页一部分的 JavaScript 文件中执行命令,您会遇到同样的错误。
当您在 setTimeout
回调中调用命令时,执行上下文不再是控制台,因此 copy
不再存在。
受到 中提到的 with
的启发,我发现您可以使用它使 copy()
在 setTimeout()
和其他回调中可用,而不是让创建对它的全局引用:
with ({ copy }) { setTimeout(() => copy("copied!"), 0) }
copied!
现在将在您的剪贴板上。不幸的是,这个技巧似乎在 Firefox 的控制台中不起作用。
Chrome 当我尝试在 setTimeout
中 copy
时抱怨。
setTimeout(function () { copy('a') }, 0)
Uncaught ReferenceError: copy is not defined
at <anonymous>:1:26
它也不适用于 window
范围。
setTimeout(function () { window.copy('a') }, 0)
Uncaught TypeError: window.copy is not a function
有趣的是,如果我保留对 copy
的引用并重新使用它,它就会起作用
cc = copy;
setTimeout(function () { cc('a') }, 0);
在 Firefox 中,它不会抛出任何错误,但即使使用已保存的引用也不起作用。
为什么 copy
函数在 setTimeout
中不起作用,这是一个错误吗?
copy
是开发人员工具 Command Line API 的一部分,在浏览器控制台之外不可用。例如,尝试在作为普通网页一部分的 JavaScript 文件中执行命令,您会遇到同样的错误。
当您在 setTimeout
回调中调用命令时,执行上下文不再是控制台,因此 copy
不再存在。
受到 with
的启发,我发现您可以使用它使 copy()
在 setTimeout()
和其他回调中可用,而不是让创建对它的全局引用:
with ({ copy }) { setTimeout(() => copy("copied!"), 0) }
copied!
现在将在您的剪贴板上。不幸的是,这个技巧似乎在 Firefox 的控制台中不起作用。