Chrome内でのJSの挙動の違い
また椅子で寝落ちしててこの時間です。おはようござまーす
作ってほったらかしてたJustResizeを修正してたのですが
前からちょっと気になっていた点があるので列挙してきます。
-
- window.onloadのタイミング
通常onloadはHTML内の文章を読んだあとに画像を読み込み、そのあとに実行される。
以下のサンプルだと次の画像のようになる。
<html> <head> <title>test</title> <script type="application/javascript"> window.addEventListener("load", function() { alert("loaded"); }, false); </script> </head> <body> javascript sample </body> </html>
次はChromeに同様のコードを書いてみる。テスト用のアドオンを作るのも面倒なのでjustresize.jsをカスタマイズ。
window.addEventListener("load", function() { alert("loaded: in JustResize"); }, false);
これでFirefoxを再起動すると・・・
まずこのアラートがデスクトップ画面の左上に表示され、ここでOKを押すとブラウザが表示される。もちろんその後には先ほどの文章が表示されたあとに「loaded」と表示される。
windowオブジェクトであるウィンドウ(フレーム)が表示されてないのにwindow.alertは使えてるし・・・そもそも何かをloadしたからこのイベントが発生してるわけだし・・・
よくわかりません
-
- 追記
それぞれのalertの部分を
var cnt = 0; for(var i in window) cnt++; alert(cnt);
にしてみた。
アドオン内では1115、test.htmlの方では95だった。
windowが指してる対象が違う・・・?
御存知の方いらっしゃいますかー?
-
- 解決編
MDCで該当ページみつけられました。
というかここ昨日も調べた時に見たページだったのに見逃してたorz
とりあえずここになります。
chrome コードでウィンドウを取り扱う - Mozilla | MDN
通常HTMLページで使っているwindowはChrome内からのwindowではchrome://browser/content/browser.xulを指していました。
この中の要素として複数の(タブ単位の)windowがある、というイメージになりますので
結局のところ、今開いてるタブのwindowオブジェクトにアクセスするにはcontentが使えます。
その下のdocumentならcontent.documentですね。
タブ指定しての対象windowの取り方はこれから調べてみます。