Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 February 14th Thursday

GreaseKitのソースをチェックアウトして眺めてみた

| 16:17 | GreaseKitのソースをチェックアウトして眺めてみた - FFFF を含むブックマーク はてなブックマーク - GreaseKitのソースをチェックアウトして眺めてみた - FFFF

Greasemonkeyのソースがかなりアレな件 - hogehoge @teramako

ユーザスクリプト内で(function(){ ... })()とわざわざクロージャを作る必要は無い

に反応。

上記はGreasemonkeyの話。

Operaではfunctionでラップしないとグローバルに変数を作ってしまう。

さらにOperaの場合、user.jsという拡張子にするとwindow#loadイベントで実行される。

.jsだとページ内のどのScriptよりも先に実行される(よって、ページのDOMの作成完了前に実行される。Greasemonkeyと揃えるなら自前でDOMContentLoadedにイベントをセットする必要がある)

詳しくは http://jp.opera.com/support/tutorials/userjs/using/


で、GreaseKitはどうだったか少し調べてみようということで、

http://code.google.com/p/greasekit/

からソースをCheckoutしてみたんだけど、、、

えーと、これはObjective-Cってやつですかね。それすら自信がない。。

ただ、

http://greasekit.googlecode.com/svn/trunk/template.js

このファイルがテンプレートになっていたり、

http://greasekit.googlecode.com/svn/trunk/CMController.m

には、// eval on frame ってコメントがあるようにframeで実行されているみたいなのでGreasemonkeyと同じくfunctionでラップする必要はなさそうです。

実行タイミングはDOMContentLoaded相当だと思うんだけど、それを裏付けるソースがわからなかった。。

あ、ちなみにfunctionでラップされているってことは、いきなりreturnしてもokってことですね。

作者のkzysさんから「DOMContentLoaded 相当」とのコメントをいただきました。実装としては、jQueryなどで実現されている方法と同じようです。これは厳密なDOMContentLoadedではないので、GreaseKitスクリプトからwindowのonloadイベントを触るのは確実性に欠けるようです(oAutoPagerizeで触った実感としても)。個人的には、GreaseKitがOperaのUserJavaScript互換になったら嬉しいかなと思う。(window.GreaseKitとかも)

kzyskzys2008/02/15 15:43言語は Objective-C で、実行時は DOMContentLoaded 相当です。
実装では document.readyState == 'loaded' かどうかをチェックしています。

os0xos0x2008/02/15 16:08> kzysさん
あざっす!
「DOMContentLoaded 相当」であって、そのものではないということですね。
jQueryとかで使われているのと仕組みとしては同じ実装ですね。