2011-01-28

Greasemonkeyが0.9になってLDRizeAutoPagerizeが動かなくなった

Greasemonkeyが0.9にアップデートされてから?かどうかは分からないけどAutoPagerizeLDRizeが動かなくて困った。

エラーコンソールを見たらVimperatorプラグインldrize_cooperation.js

                GreasemonkeyService = Cc["@greasemonkey.mozdev.org/greasemonkey-service;1"].getService().wrappedJSObject;
                this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){
                    if(sandbox.window.LDRize != undefined && sandbox.window.Minibuffer != undefined){

エラーになっていた。

greasemonkey.jsをみてみたら

  evalInSandbox: function(code, sandbox, script) {

で0.8のgreasemonkey.js

  evalInSandbox: function(code, codebase, sandbox, script) {

だった。

ldrize_cooperation.js

-                this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){
+                this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,sandbox,script){

したAutoPagerizeは動くようになった

LDRizeはこれでもまだ動かない。Vimperatorを無効にしても同じ。

どうやらGreasemonkey 0.8ではMinibufferでのwindowとLDRizeでのwindowが同一のXPCNativeWrapperオブジェクトだったけど0.9では別のオブジェクトになったようだ。だからLDRizeでのwindow.MinibufferもundefinedになるしGM_MinibufferLoadedのイベントリスナーを設定してもwindowが違うから発行されないということみたい

ううむ

追記

0.9.0から0.9.1の間のこの変更が原因ぽい…

https://github.com/greasemonkey/greasemonkey/commit/6a4ffd52c90091714e6f49376ef07e2ce5009f79

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん