Chrome complains when I try to copy
inside setTimeout
.
setTimeout(function () { copy('a') }, 0)
Uncaught ReferenceError: copy is not defined
at <anonymous>:1:26
It doesn't work with the window
scope as well.
setTimeout(function () { window.copy('a') }, 0)
Uncaught TypeError: window.copy is not a function
Interestingly, if I keep the reference to copy
and reuse it, it works
cc = copy;
setTimeout(function () { cc('a') }, 0);
In Firefox, it doesn't throw any error, but it doesn't work even with the saved reference.
Why copy
function doesn't work inside setTimeout
, is it a bug?
copy
is part of the developer tools' Dev Tools Utilities API and is not available outside the browser console. For example, trying to execute the command in a JavaScript file that's part of a normal web page you'd get the same error.
When you invoke the command inside the setTimeout
callback, the execution context is no longer the console so copy
doesn't exist anymore.