Kanasan.JS Greasemonkey チュートリアル読書会に参加した

Kanasan.JSGreasemonkeyチュートリアル読書会に参加した(オフィシャルの紹介ページ)。Greasemonkeyスクリプトは全然書いたことなかったので、一体どうなることやら、と思いながら参加した。結局分かったことはこんな感じ。

基本的なスクリプトの作り方

どんな風に書くのかだけど、思ったより普通でした。getElementsByTagNameとかでいじりたい要素を取ってきて、insertBeforeで挿入とか。要素を取ってくるときはdocument.evaluateXPathを使うことが多くなると思うので、XPath大事そう。それと、GM_getValueGM_setValueでそのスクリプトだけで使う設定値を読み書きできる。

あとはAPIリファレンスを読んで、気合いで。

話題に上ったこと

PDFを読んでいきながら、みんなが気になったこととかをばんばん発言してた。特に印象に残ったのは以下。

windowオブジェクト

windowオブジェクトは、参照はできるけど書き込みはできない。書き込みしたいときは代わりにunsafeWindowを使う。知らないとはまりそうなので注意する。あと、unsafeWindowは名前の通りunsafeなので、なるべく使わない方がいいよ。

@includeで使う*

@includeで出てくる*は、/でも何でも含む。なので、例えば @include http://*.example.com/* って書いたら http://www.google.com/search?q=.example.com/test みたいなのにもマッチする。

==UserScript==で書くメタデータ

メタデータってのは、

// ==UserScript==
// @name Hello World
// @include http://www.google.co.jp/*
// とか、こんなの
// ==/UserScript==

こんなやつね。この部分はスクリプトをインストールしたときにしか参照されない。インストールした後ここを書き換えても反映されない。はまりポイントその2。

addEventListnerの第3引数

addEventListnerの第3引数についてよく分かってなかったんだけど、説明が聞けたよ。このW3Cの人が書いた絵を見るといいよ。

第3引数がtrueの場合、キャプチャリングフェイズでイベントハンドラがイベントをキャプチャする(図の赤色)。falseの場合、バブリングフェイズになるまでキャプチャされない(図の緑色)。falseを使うことが多い。IEではfalse相当のことしかできない(キャプチャリングフェイズではキャプチャできない)。んなアホな。

またIEか

毎回IEのアホ仕様の話題が出てくる。ほんとはIE大好き。

まとめ

今回も盛りだくさんだった。ほんとに「ちゃんと勉強になる」勉強会だ。便利で、テクニカルで、ちょっとダサいJavaScriptはやっぱり面白い。そんなJavaScriptのみんなの意見が聞けて、議論ができる、そんなKanasan.JSは超面白い。

あと、懇親会で「zshって、apt getでパッケージ名とか、scpでリモート側のファイル名とかばんばん補完できるぜ」って自慢しておいた。Kanasan.ZS。