またGoogle検索のデザインが変わり、日本語サイトを除外して検索するグリモンが使えなくなったので修正した。
https://github.com/paulownia/greasemonkey/blob/master/googleNotInJapanese.user.js
インストールは右の方のRawをクリックで。Chromeの人は、一度ファイルに保存して拡張機能の画面にドラッグ&ドロップするとインストールできます。
ところで、このグリモンではGoogleのAjax検索に対応するため、DOMノードの変更を検出している。今まではMutation Eventを使用して検出していた。
node.addEventListener("DOMNodeInserted", function(e){ });
しかし現在Mutation EventはDeprecatedとなっている。代わりにMutation Observerという新しいAPIが提供されているので、今回そちらを使ってみた。
var observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation) { console.log(mutation.target); }); }); var target = document.body; observer.observe(target, { childList: true , subtree: true});
新しいAPIの何が良いかというと、効率のために↓のようなハックが不要なこと
- http://javascript.g.hatena.ne.jp/edvakf/20100204/1265312155
- http://d.hatena.ne.jp/sandai/20110224/p1
連続でDOMを追加した場合、DOMNodeInsertedイベントはnodeが追加されるたびに発火するのだが、MutationObserverでは一連の変更終了後にまとめて一度だけコールバックを実行するので、このようなハックは不要になる。というわけで、あんまり考えなくても効率的に実行できていいねという話だ。
ちなみにこのグリモンではどちらを使ってもほとんど変わらないw