JavaScriptの動かないコード (中級編) "インターネットサイト を開けません。操作は中断されました。"
クイズ…下記のコードが意図した動作をしないのは,どうしてですか。(制限時間1分)
<body> <p> <script language="JavaScript"> document.body.innerHTML = "test"; alert(document.body.innerHTML); // "test"と表示 </script> </p> </body>
答え
IEで上記のコードに出会うと,"test"とアラート表示された直後に,
インターネットサイト を開けません。操作は中断されました。
のエラーダイアログが表示され,「Internet Explorer ではこのページは表示できません」のページに切り替わる。
IEでは,ページの読み込み途中に,documentオブジェクトに対してDOM操作をするのを控えた方がよい。
参照:Internet Explorer Programming Bugs
http://channel9.msdn.com/wiki/interne...
Apparently interacting with innerHTML and possibly using other JScript functionality causes IE to pop up "Internet Explorer cannot open the Internet site http://example.com. Operation aborted." messages after loading a page.
...This is generally caused by DOM operations gone wrong,
I was having this problem trying to put some html inside a DIV tag using innerHTML and solved the problem by puting the DIV inside a TABLE.
上記のエラーを回避するためには,ページの読み込みが終わるのを待ち,onloadイベントでDOM操作するように変更すればよい。
<body> <p> <script language="JavaScript"> window.onload = f; function f() { document.body.innerHTML = "test"; alert(document.body.innerHTML); // "test"と表示 } </script> </p> </body>
ちなみに,Firefoxでは前者の記法でもエラーは発生しない。
また,IEであっても,冒頭のHTMLで<p>タグを外せばエラーは起きない。謎の多い仕様。