ユーザスクリプトがロードされるタイミング
先日のGreasemonkeyのソースがかなりアレな件で
id:poolmmjp さんから
クロージャ不要の件もonload不要の件も、今の実装がそうってだけで、今後のバージョンもそうだっていうのはあるのかなあ?仕様書に書いてあるならそうなんだろうけど、コードがそうなってるだけなら、たまたまかも。
というブクマコメントを頂いたので回答。
仰るとおり。たまたまかもしれません。
ただ、クロージャに関してはGreasemonkey製作者の気まぐれで変更される可能性がありますが、DOMContentLoaded
イベント発行時にユーザスクリプトが読み込まれる方は簡単には変わらないでしょう。
理由.1
読み込んだページのURLが確定していないといけない
理由.2
DOMが生成されている必要がある
new Components.utils.Snadbox()
上でスクリプトを実行させるのだが、この生成されたオブジェクトは最初からwindow
やdocument
オブジェクトを持っているわけではない。
sandbox.window = safeWin; sandbox.document = sandbox.window.document; sandbox.unsafeWindow = unsafeContentWin;
というようなことしてオブジェクトをわざわざ配置しているのである。これをするためには当然のことながらsafeWinやらunsafeContentWinがnullだったりundefinedではいけない。
理由.1は理由.2が保障されれれば解決なので実質理由.2が解決されれば良い。んで、そのタイミングは? っていうとDOMContentLoaded
イベントが発行された時でしょ。
というか、ドキュメントに書いてあった