为什么复制功能在setTimeout中不起作用?

问题描述 投票:6回答:2

当我尝试在copy中使用setTimeout时,Chrome会抱怨。

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中不起作用,它是一个bug吗?

javascript google-chrome firefox google-chrome-devtools firefox-developer-tools
2个回答
4
投票

copy是开发人员工具'Command Line API的一部分,在浏览器控制台之外不可用。例如,尝试在JavaScript文件中执行该命令,该文件是普通网页的一部分,您将收到相同的错误。

当您在setTimeout回调中调用命令时,执行上下文不再是控制台,因此copy不再存在。


1
投票

受到在with中提及this answer的启发,我发现你可以使用它在copy()和其他回调中提供setTimeout(),而不必创建它的全局引用:

with ({ copy }) { setTimeout(() => copy("copied!"), 0) }

copied!现在将在你的剪贴板上。不幸的是,这个技巧似乎在Firefox的控制台中不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.