OperaのURL変更とタイマー
Operaでタイマーが効かなくなる場合がある、と以前書いたが*1、その動作条件が分かった。
URLハッシュを変更した後にタイマーを設定すると、失敗するようだ(URLのハッシュ以外の所を変えると画面が遷移してしまうのでタイマーもすべて意味をなさなくなるが、URLのハッシュのみを変えると画面は遷移しない)。
function testcall(){ alert("呼ばれませんよ"); } function test(){ location.hash = "#test"; timerid = setTimeout(testcall,100); }
このようなスクリプトの場合、いくら test を呼んでも testcall は呼ばれず、timerid は 0 を返す。
で、URLハッシュの変更をタイマー設定の後にすると、タイマーは動作するようだ。
function testcall(){ alert("呼ばれますよ"); } function test(){ timerid = setTimeout(testcall,100); location.hash = "#test"; }
意味が分からん。まあ「かなり特殊な場合」なんだけど、「ポテトはいかがですか」はその特殊な状況に陥っていた。