Home > JavaScript > User JavaScriptのロードタイミング

User JavaScriptのロードタイミング add this entry to hatena bookmarkhatena bookmark counter

ニコニコポンのGreasemonkeyスクリプトを書いてて気づいたのだが、ブラウザごとにJavaScriptの実行タイミングが異なるようなので、それの対処に苦慮した。

  • Firefox + Greasemonkey: onloadイベントの直前
  • Safari + Creammonkey: onloadイベントの直前
  • Opera: onloadイベントの直後
  • IE + Trixie, Sleipnir + SeaHorse: onloadイベントの直後

読み込まれたHTMLのDOMツリーにアクセスして内容を書き換える処理を行うUser JavaScriptを書くとして、FirefoxとSafariではaddEventListenerでloadイベントに関連づければよく、OperaとIE系では(loadが終わってからスクリプトが実行されるため)そのまま関数を実行すればよいということになる。

これをふまえて、DOMツリーを操作する関数fnTouchDOMをクロスブラウザで適切なタイミングに実行させるスクリプトは下記のようになる。

var fnTouchDOM = function(){
	....
};

// ---
// [Util] UserAgent Matches
// ---
function inUA(_kw){
	return navigator.userAgent.indexOf(_kw);
}

// ---
// (Global) Event Regist/caller
// ---
if(inUA('Opera')!=-1 || inUA('MSIE')!=-1){
	fnTouchDOM.apply();
} else if(inUA('Gecko')!=1 || inUA('AppleWebKit')!=-1){
	window.addEventListener('load',fnTouchDOM, true);
}

ただ、引数なしのapply()をしていいのか怪しいのと、userAgentを明示した分岐があまりスマートでなかったりするのが課題。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://d.1555.info/2007/03/19/user-js_load-timing/trackback/
Listed below are links to weblogs that reference
User JavaScriptのロードタイミング from しゃおの雑記帳

Home > JavaScript > User JavaScriptのロードタイミング

Search
Feeds
Meta

Return to page top