Safari と Chrome で次のコード行が表示されるエラーについて、詳しく教えていただきたいです。
setTimeout(window.location.reload, 250);
Chrome のレポート:
Uncaught TypeError: Illegal invocation
そしてSafari:
TypeError: Type error
Firefox では、コードは問題なく動作します。また、このコードは次の 3 つのブラウザのいずれでも問題なく動作します。
setTimeout((function() {
window.location.reload();
}), 250);
Chrome と Safari ではこのコードに問題はありません:
var say_hello = function () { alert("hello") };
setTimeout(say_hello, 250);
window.location.reload
このエラーの原因となる特別な点は何ですか?
(役に立つかどうかは分かりませんが、ここにjsfiddleこれを例証する)
ベストアンサー1
なぜなら、として がreload()
必要です。言い換えると、それは の方法です。次のように言うと:window.location
this
window.location
var fun = window.location.reload;
fun();
reload()
参照なしでthis
(または暗黙的なwindow
参照で)関数を呼び出しています。
これは動作するはずです:
setTimeout(window.location.reload.bind(window.location), 250);
部分window.location.reload.bind(window.location)
は、関数を受け取り、呼び出されたときに内部で参照としてwindow.location.reload
使用する関数を返すことを意味します。window.location
this
reload()