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

Greasemonkey 0.9.1 以降のバージョンで AutoPagerize Switcher が動かなくなっていたのを修正

greasemonkey

Greasemonkey をアップデートしたら AutoPagerize Switcher が動かなくなってしまった!

と、いうわけで

修正しました。

インストールする

こちらからどうぞ。
http://userscripts.org/scripts/show/55178

何がいけなかったか

下のように 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);
  }
})();