Greasemonkey 0.9.1 以降のバージョンで AutoPagerize Switcher が動かなくなっていたのを修正
Greasemonkey をアップデートしたら AutoPagerize Switcher が動かなくなってしまった!
と、いうわけで
修正しました。
インストールする
何がいけなかったか
下のように window.AutoPagerize が存在するかどうかで処理を行うかの判定をしていたんだけど、どうやら Greasemonkey 0.9.1 以降ではそれぞれのスクリプト毎に window オブジェクトが別になったみたいで、AutoPagerize をインストールしているのにも関わらず window.AutoPagerize が取得できずに処理をスルーしていた。
// ==UserScript== // @name AutoPagerize Switcher // @namespace http://www.ohaco.jp/ // @description AutoPagerize をキーボードで on/off 切り替え可能にする Greasemonkey スクリプト。 // @include http://* // ==/UserScript== (function() { if(window.AutoPagerize) { // やりたい処理 } })();
どこを直したらいいか
どうしようかと思ってググっていたらこんなものを発見。
AutoPagerizeが実行されたときに
var ev = document.createEvent('Events') ev.initEvent('GM_AutoPagerizeLoaded', false, true) window.dispatchEvent(ev)というコードが実行されてGM_AutoPagerizeLoadedという名前のイベントが送られてくるようにしました。
http://ido.nu/kuma/2009/01/22/independence-from-userscript-order-dependency/
なるほどー。本来はスクリプトの実行順序を気にしなくても使えるように追加されたものらしいけど、これは使えるかもしれない。
そんなわけで
下のように修正してみたところ、無事に動くようになりましたとさ。
// ==UserScript== // @name AutoPagerize Switcher // @namespace http://www.ohaco.jp/ // @description AutoPagerize をキーボードで on/off 切り替え可能にする Greasemonkey スクリプト。 // @include http://* // @include https://* // @version 1.0.1 // ==/UserScript== (function() { function init() { // やりたい処理 } if(window.AutoPagerize) { init(); } else { document.addEventListener('GM_AutoPagerizeLoaded', init(), false); } })();