proglog

主にプログラミングに関する断片的メモ

[Firefox] firefox17とminibufferとldrizeとUserScriptLoaderとtombloo

Firefox17にアップデートした。
使ってるアドオンはだいたい動いた。
Easy DragToGo+は、拖拽 展:Easy DragToGo+ 1.1.7 BETA10(2012.7.23更新) Mozilla Firefox中文社区にある1.1.7にしたら動いた。

スクリプト関係でいくつか動かないのが出た。

minibufferとldrize

まず、e4xがobsoleteだかdeprecatedだかで使えないのでその部分を修正。

minibuffer.user.jsの819行目付近

GM_addStyle("#FLASH_MESSAGE{ \
			position : fixed; \
(中略)
		} \
	");

こんな感じに。
うじゃうじゃっとしたカッコを取り去ってダブルクォートで囲って、"\"で行をつなげただけ

もう一ヶ所925行目付近のGM_addStyleも同じようにする。

あと、minibufferオブジェクトが他から見えない状態になってるようなので、unsafeWindowに付け替えてみた。

minibuffer.user.jsの1741行目付近の最後の"}"の直前

window.dispatchEvent(ev);
unsafeWindow.dispatchEvent(ev);
unsafeWindow.Minibuffer = window.Minibuffer;
}


次にldrize.user.js
150行目辺りの"// !!! END OF SETTINGS !!!"の下くらいに、

window.Minibuffer = unsafeWindow.Minibuffer;

という行を追加。

これでとりあえず動いたけど、副作用やらなにやら、これでいいのかは不明。
しばらく試す。

追記
// ==UserScript==
// @name           delMinibuffer
// @namespace      http://hatena.jp/serian
// @description    delete Minibuffer obj from unsafeWindow
// @include        *
// ==/UserScript==

unsafeWindow.Minibuffer = null;

こんな感じのを、"ZZZZZ-delMinibuffer.user.js"とかいう名前で作っておく。
"ZZZZZ"は、一番最後に実行されるように。

すると、スクラッチパッドなんかでMinibufferを取得しようとしてもできないけど、LDRizeは動いてる感じ。
多少はセキュリティー的にいいのかも?

tomblooとUserScriptLoader

UserScriptLoaderの中でtomblooのオブジェクトを取得してサンドボックスに入れてuserscriptから使うということをしてた。
greasemonkeyや、scriptish用には、tombloo自身がやってくれてること。

sandbox.Tombloo = Cc['@brasil.to/tombloo-service;1'].getService().wrappedJSObject;

930行目くらいにこんなのを入れて、
GoogleReader + Tomblooみたいなスクリプトの中で

var tombloo = Tombloo.Tombloo.Service;

みたいにして、使っていた。
これが、Firefox17にしたら、動かなくなった。
Tombloo.Tomblooが未定義になる。
ためしにTombloo.Serviceだけで参照してみたら、なんかユーザー定義の属性の無いオブジェクトになってる?

なんかセキュリティー関連の変更が合ったんだろうか。
どうしたものか。

追記

コメントで教えてもらいました。

Tombloo.Service.__exposedProps__ = {check: "r", share: "r"};

TomblooService.patch.js

こんな感じのパッチを入れて、使えるようになりました。

参考 Nightlyで今すぐGoogle Reader Full Feed Modを動かす方法 - Firefox更新情報Wikiブログ