またでたよ。IE。
jasonpとかでスクリプトを読み込んで実行するときに、最初のkicker(loader?)的なスクリプトを書く場所によってエラーが発生する。
「インターネットサイトxxxを開けません。操作は中断されました」というエラーウィンドウがでて、サイトは表示されない状態となる。
例:
kicker.js
function kicker(){
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.setAttribute("src","./callee.js");
document.body.appendChild(script);
return true;
}
scriptタグを作ってcallee.jsを読み込むだけ。
callee.js
function callee(){
document.getElementById("hogefuga").appendChild(document.createTextNode("hogefuga"));
return true;
}
callee();
テキストノードを埋め込むだけ。最後に自分を呼んでいる。
buggy.html(動かないケース)
<html>
<head>
<script type="text/javascript" src="./kicker.js" charset="utf-8" ></script>
</head>
<body>
<div>
<div id="hogefuga"></div><!-- ここにテキストノードが書き加わる -->
<script>
<!--
kicker();
//-->
</script>
</div>
</body>
</html>
問題は、scriptタグがdivに囲まれていることらしい。
下記のように変更すると動く
:
<div>
<div id="hogefuga"></div>
</div>
<script>
<!--
kicker();
//-->
</script>
:
でも、いつもいつも外側に書けるわけでもないよね?
そういう時はeventListenerだそうだ。
if(window.addEventListener){
window.addEventListener("load",kicker, false);
}else{
window.attachEvent("onload",kicker);
}
もう、いい加減面倒くさいよ。
参考: http://yusuke.homeip.net/diary/2006/03/12/1142155862799.html
ちなみに、何を作っていて気付いたかというと、このブログの「コメント」欄。
といっても、「はてなブックマーク」をコメント欄代わりに表示しているだけ。