Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 January 31st Thursday

Greasemonkey、Opera、GreasekitのAutoPagerizeにaddFilterするスマートな書き方

| 15:56 | Greasemonkey、Opera、GreasekitのAutoPagerizeにaddFilterするスマートな書き方 - FFFF を含むブックマーク はてなブックマーク - Greasemonkey、Opera、GreasekitのAutoPagerizeにaddFilterするスマートな書き方 - FFFF

setTimeoutすると、現在実行されている処理が終わったところ*1でセットした関数が実行されることになる。

つまり、Greasemonkeyの場合、すべてのGreasemonkey Scriptが実行されたあとにsetTimeoutした関数が実行されるので、AutoPagerizeが実行されたあとにほぼ確実にaddFilterすることができる。

setTimeout(function(){
if (window.AutoPagerize && window.AutoPagerize.addFilter){
//add filter function
}
},0);

また、unsafeWindowを使う場合で、且つOperaやGreasekitにも対応するなら、setTimeoutの第3引数を使って、

setTimeout(function(unsafeWindow){
if (window.AutoPagerize && window.AutoPagerize.addFilter){
//add filter function
}
},0,this.unsafeWindow || window);

こんな感じにすると良いと思う。

*1:alertなどがあるとその限りではないのだが

quaaquaa2008/01/31 20:49>ところで、Operaだとdocument.postMessageなんだよね。なんで違うんだ?

以前のHTML 5の仕様(http://www.whatwg.org/specs/web-apps/2006-01-01/#postmessageなど)ではpostMessageはDocumentの方に属していたので、おそらく実装時期によって違いが出ているんだと思います。

os0xos0x2008/01/31 20:57>quaaさん
おお、なるほど。納得です。
考えてみるとdocument同士のやり取りというより、window同士のやり取りに使う感じだからwindowのほうがしっくりきますね。

nanto_vinanto_vi2008/05/16 02:41'_' + Math.pow(10,len)
の代わりに
(1 << len).toString(2)
とすれば扱える桁数がちょっと増えるけど、ぱっとFirefoxで試した限り速度は遅くなるみたいですね。

それから「ユーザーエージェントに頼らないブラウザの判定」の追記部分「Firefox(Geckoエンジン)がNGでした」にins要素のタグ閉じ忘れがあります。

os0xos0x2008/05/16 03:11>nanto_viさん
なるほど。ぱっと見そちらのほうが速くなりそうですが、toStringがコスト高めなのかな。

タグ閉じ忘れの指摘ありがとうございます、修正しました。