読者です 読者をやめる 読者になる 読者になる

gotin blog

Whatever gotin wanna write

jQueryをGreasemonkeyで使う

追記3

そもそもjQueryGreasemonkeyで使う際になぜ、工夫が必要だと思ったかというと、過去にuser script内でjQueryのソースをevalするのを試したときにうまくいかなかった経験があったからな気がしてきました。よく覚えてはいませんが。

  • jQuery.attrが使えない。値の取得も設定もエラーが発生する。
  • jQuery.valで値を設定しようとしても同じ。取得はできた。
  • $.ajaxも使えない(何が起こるかは忘れた)。

$.ajaxはGM_xmlhttpRequestでいいんだけど、jQuery.attrとjQuery.valはかなり痛い。確認してないけど、多分jQuery.textも同じだろう。

Greasemonkey で jQuery を使うための覚え書き - 記憶は削除の方向で

↑というようなことも書かれているので、user script内evalではダメなんですね。
でも、@requireでjQueryのソースを取り込む場合はattrもvalもajaxも(クロスドメインじゃなければ)使えます。
きっと@requireはuser script内evalとは違う実行方式をとっているんですね。

追記2

さらにちらっとjQueryのソースをみてみたところ、attrあたりはGreasemonkeyでもそのまま動くような気がしてきて、
実際に試したら動きました。
あれ。
じゃぁと、おもって他のメソッドも調べたらそのままでちゃんとうごきました。
あれあれ。
なんでこんなことしてたんだっけ。。。


ってことは直すべきはajaxぐらいなのかな。
しかもajaxもクロスドメインじゃなければそのままでちゃんとうごくし。


おかしいなぁ、なんでこんなことしてたんだろ。。。。


ということでこのエントリ、まるで意味がない気がしてきました。
もっと細かいところで動かないところがあったりするのかな。

もうちょっと深追いしてみます。。

追記1

ちらっとjQueryのソースをみてみたら、
attrだけでも全然動作を誤解しているところがありました。
(複数要素に対してattrを引数二つで呼び出すと全要素に対して共通の属性値を設定できる、とか。)
まぁアプローチは悪くないと思うので、そのうちちゃんと読んでちゃんと反映させたいと思います。

ここから本文

いろんな人がいろんなアプローチをしているようですね。
といいつつ、あまりみんなの手法を詳しく見ていません。
こういう方法でもいいのかなと思った方法を試してみました。
ver0.8から導入された@requireを使ってjqueryを読み込んで、
さらにplugin形式でattrとかtextとかのメソッドを置き換えています。

多分、jqueryのコードを見ながら置き換えする処理も記述すればもっといい感じになると思いますが、とりあえず適当に書いてみました。ajaxとかもGM_xmlhttpRequestを使って定義すれば便利になると思われます。

で、肝心のコードですが↓こちらです。
jQuery4gm.user.js



うまれて初めてgit(とgithub)を使ってみました。
github的には
http://github.com/gotin/jquery-for-greasemonkey/tree/master
↑ここにおきました。

よく分かっていないんですが、githubとかに置いておくと気の向いた人がすばらしいコードになおしてくれたりするんですよね。ほんとかな。