2010年10月6日水曜日

ウェブブラウザの振るまい確認 - その 1 (<iframe onload="...)

Blogger 上で JavaScript - その 2 (onload) を書き終えてから、iframe の中の文書を書き換えたら、再び onload が呼ばれるかもしれないと、ふと気づいて、次の 3つのときにログを残して確認してみる。

  • onload が呼ばれたすぐ後
  • .open() の前
  • .close() の後

※ 実際のコードは (") は &quot; で (<) は &lt; で (>) は &gt;。

  • onload this.onload_count = (typeof(this.onload_count)!='number')?3: this.onload_count-1; if (this.onload_count <= 0) { return; } var log = document.getElementById('browserbehavior1'); log.innerHTML = '<div>onload:' + this.contentWindow.location.href + '</div>\n' + log.innerHTML; d=this.contentWindow.document; log.innerHTML = '<div>&nbsp; .open();</div>\n' + log.innerHTML; d.open(); d.write('<p style="font-size:80%;font-family:verdana,sans-serif;">Browser Behavior 1st</p>'); d.close(); log.innerHTML = '<div>&nbsp; .close();</div>\n' + log.innerHTML;

結果 - Firefox 3.6.9 on Windows XP SP2

  1. onload:about:blank
  2.   .open();
  3.   .close();

となって、再び onload は呼び出されないもよう。

結果 - Internet Explorer 7 on Windows XP SP2

  1. onload:about:blank
  2.   .open();
  3. onload:http://softie.blogspot.com/...
  4.   .open();
  5. onload:http://softie.blogspot.com/...
  6.   .open();
  7.   .close();
  8.   .close();
  9.   .close();

のような順番でログに残っているので、おそらく .close(); を実行すると onload が再び呼ばれてループするもよう。
onload のはじめで、2回目以降は実行されない工夫が必要。

検証用コンテンツ

iframe
logs