Greasemonkey 0.9.5でもldrize_cooperationがちょっと動くようにする
Greasemonkey 0.9.5から*1内部仕様変更の為に2011年6月9日現在のldrize_cooperation.jsが動かなくなったので、復活させるパッチを書いた。ただし、ldrize_cooperation.jsの他の色々な機能は死んだまま(拡張ヒントlとLとか、コマンドmbとかpinとか、intelligence_bindとかも)*2
まずFirefox 4以降の人はFirefox 4 で Minibuffer + LDRize + ReblogCommand を動かす | WWW WATCHを参考にLDRize自体を動くようにしておく。
あとは2011年6月9日現在のldrize_cooperation.jsへ以下のパッチを当てるだけ。
--- a/ldrize_cooperation.js +++ b/ldrize_cooperation.js @@ -315,7 +315,8 @@ this.LDRizeCooperationPanel.setAttribute("src",value ? DISABLE_ICON : ENABLE_ICON); _isEnable = value; }, - isEnableLDRize: function() this.LDRize.getSiteinfo() != undefined, + isEnableLDRize: function() this.LDRize.getSiteinfo() != undefined || + window.content.wrappedJSObject.document.getElementById("gm_ldrize") != null, isEnableLDRizeCooperation: function() /^https?:$/.test(content.location.protocol) && this.isEnable && this.isEnableLDRize(), //Pin
パッチ当て済みのldrize_cooperation.jsはこちら
動かなくなった原因
ldrize_cooperation.jsは、今までLDRizeとMinibufferのインスタンスを取得するために、GM_GreasemonkeyService#evalInSandbox()と言う関数をフックしていた。けれど例のグリモンのコミット0cb7d4acf437a4a88e3dによって、このGM_GreasemonkeyService#evalInSandbox()に相当する関数が、グリモンのコンポーネントグローバルな関数runScriptInSandbox()に置き換えられ、フックできなくなったためLDRize、Minibufferのインスタンスを取得できなくなった。*3
つまり、パッチを見て感じ取れる通り、isEnableLDRize()関数がfalseを返しちゃうのが割と直接の原因。