Firefox3.5RCにしたらvimp/ldrize_cooperation.jsでエラーが出ていたのでなんとかした
Firefox3.5 RCがリリースされているのでそろそろ移行準備をしようと思って入れてみました。
そしたら、vimpのldrize_cooperation.jsがエラーを吐いて動きません。
Googleの検索結果でjk叩くとこんなメッセージがでます。
Processing keypress event: TypeError: this.LDRize.getSiteinfo is not a function
![]()
で、結論から言うとFirefox 3.0.2の時に動かなくなったときと同じ方法で対処したらエラーは出なくなりました。
Firefox に凹まされた件 - KBDAHOLIC - やぬすさんとこ
上記エントリーを参考(というかそのままですけど)にした、現時点でCodeReposのtrunkに上がっているものに当てるパッチはこんな感じになります。
TEXT:
- --- ldrize_cooperation.js.orig 2009-06-22 16:52:51.000000000 +0900
- +++ ldrize_cooperation.js 2009-06-22 16:48:03.000000000 +0900
- @@ -1,6 +1,6 @@
- // Vimperator plugin: 'Cooperation LDRize Mappings'
- // Version: 0.25
- -// Last Change: 12-Jun-2009. Jan 2008
- +// Last Change: 22-Jun-2009. Jan 2008
- // License: Creative Commons
- // Maintainer: Trapezoid <trapezoid.g@gmail.com> - http://unsigned.g.hatena.ne.jp/Trapezoid
- //
- @@ -127,7 +127,7 @@
- initialize: function(){
- var self = this;
- this.LDRize = {getSiteinfo: function() undefined};
- - this.Minibuffer = null;
- + //this.Minibuffer = null;
- this.handlerInfo = handlerInfo;
- this.LDRizeCooperationPanel = this.setupStatusbarPanel();
- @@ -176,12 +176,14 @@
- this.addAfter(GreasemonkeyService,"evalInSandbox",function(code,codebase,sandbox){
- if(sandbox.window.LDRize != undefined && sandbox.window.Minibuffer != undefined){
- sandbox.window.addEventListener("focus",function(){
- - self.LDRize = liberator.eval("self",sandbox.LDRize.getSiteinfo);
- - self.Minibuffer = liberator.eval("command",sandbox.Minibuffer.addCommand);
- + //self.LDRize = liberator.eval("self",sandbox.LDRize.getSiteinfo);
- + self.LDRize = sandbox.LDRize;
- + //self.Minibuffer = liberator.eval("command",sandbox.Minibuffer.addCommand);
- },false);
- if(window.content.wrappedJSObject == sandbox.unsafeWindow){
- - self.LDRize = liberator.eval("self",sandbox.LDRize.getSiteinfo);
- - self.Minibuffer = liberator.eval("command",sandbox.Minibuffer.addCommand);
- + //self.LDRize = liberator.eval("self",sandbox.LDRize.getSiteinfo);
- + self.LDRize = sandbox.LDRize;
- + //self.Minibuffer = liberator.eval("command",sandbox.Minibuffer.addCommand);
- }
- }
- });
- @@ -248,6 +250,7 @@
- });
- liberator.modules.commandline.echo(showString,liberator.modules.commandline.HL_NORMAL,liberator.modules.commandline.FORCE_MULTILINE);
- },{});
- +/*
- liberator.modules.commands.addUserCommand(["mb","m","minibuffer"],"Execute Minibuffer",
- function(arg){ self.Minibuffer.execute(arg.string.replace(/\\+/g,"")) },
- {
- @@ -264,6 +267,7 @@
- context.completions = completionList;
- }
- });
- +*/
- liberator.modules.commands.addUserCommand(["pindownload"],"Download pinned links by any software",
- function(arg){ self.downloadLinksByProgram("download",self.getPinnedItems());},{});
- liberator.modules.commands.addUserCommand(["pindo"],"Do external command, with pinned links",
先人の知恵は素晴らしい!
id:janus_wel++
ちなみに全部試してみたわけじゃないですが、これ以外はだいたい動いてる感じなので、正式版を待たずにこのまま移行してしまおうかと思います。


pekepekesamurai 8:57:49 on 2009/6/23 火曜日 パーマリンク |
蛇足ですが、3.5b99以降、liberator.eval がクロージャ内のオブジェクトがみれなくなったことによるエラーです(正確にはサブスクリプトローダー経由のevalの挙動変更によるものかと)。
このせいで、LDRize内部のメソッドが参照できなくなるため、inteligence bind等が動作しなくなります。
僕は以下のような変更して使ってます。it (typeof ?の部分の追加のみ。
多分、3.0だと eval がうまくうごくので inteligence bind を活かしつつな感じになる(と思う)。
self.LDRize = liberator.eval(“self”,sandbox.LDRize.getSiteinfo);
self.Minibuffer = liberator.eval(“command”,sandbox.Minibuffer.addCommand);
if (typeof self.LDRize.getSiteinfo != ‘function’) self.LDRize = sandbox.LDRize;
if (typeof self.Minibuffer.addCommand != ‘function’) self.Minibuffer = sandbox.Minibuffer.command;
以上、蛇足でした。失礼しました。
fifnel 9:42:21 on 2009/6/23 火曜日 パーマリンク |
非常に参考になります。ありがとうございます。
こちらの変更ならMinibufferをつぶさなくてすみますね。
私の環境ではこちらを使わせていただきます。
links for 2009-06-23 « 個人的な雑記 7:02:27 on 2009/6/24 水曜日 パーマリンク |
[...] Firefox3.5RCにしたらvimp/ldrize_cooperation.jsでエラーが出ていたのでなんとかした ? ふぃふmemo (tags: firefox) [...]