- 2007-03-19 (月) 3:50
- JavaScript
ニコニコポンの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を明示した分岐があまりスマートでなかったりするのが課題。
- Newer: mixi Publisherを導入
- Older: WordPressにしてみました
Comments:0
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 しゃおの雑記帳
