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?
Inspired by the mention of
with
in this answer, I discovered that you can use it to makecopy()
available insetTimeout()
and other callbacks, instead of having to create a global reference to it:copied!
will now be on your clipboard. Unfortunately, this trick doesn't seem to work in Firefox's console.copy
is part of the developer tools' Command Line 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 socopy
doesn't exist anymore.