ブックマークレット、IEで落ちる
外部スクリプトを呼び出すブックマークレットのスクリプトの中に、scriptタグをクリーンアップするコードを入れていたら、2回目の呼び出しでIE7が落ちた。リロードしてたりページ移動していても同じ。
外部スクリプト (bookmarklet_helloworld.js)
(function() { alert('Hello World, from bookmarklet code'); var scripts = document.getElementsByTagName('script'); for (var i=0; i<scripts.length; i++) { var script = scripts[i]; if (/\/bookmarklet_helloworld\.js$/.test(script.src)) { script.parentNode.removeChild(script); break; } } })();
ブックマークレット本体
javascript:(function(u,d,s){s=d.createElement('script');s.type='text/javascript';s.src=u;d.body.appendChild(s)})('http://example.com/bookmarklet_helloworld.js',document)
以下のようにsetTimeoutで回避。
変更済みスクリプト (bookmarklet_helloworld.js)
(function() { alert('Hello World, from bookmarklet code'); var scripts = document.getElementsByTagName('script'); for (var i=0; i<scripts.length; i++) { var script = scripts[i]; if (/\/bookmarklet_helloworld\.js$/.test(script.src)) { window.setTimeout(function() { script.parentNode.removeChild(script); }, 1); break; } } })();
原因とかがわかるといいなとおもったが、最小ケースを出すので力つきた。ねむい。
追記(2008-07-23)
ここらへんときっと同じ現象か。
http://mayokara.info/blog/archives/2007/12/25191355.php