ブックマークレット、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