青春スイーツ RSSフィード

2008-10-19 Sun

[] いくつかのGreasemonkeyスクリプトが動かなくなってた件

FirefoxというかGreasemonkeyの話。

2008年1月頃にGreasemonkeyのUpdateがあった。

その更新によってunsafeWindowの中でGM_xmlhttpRequestなど、いくつかのメソッドが使えなくなっていたことに昨日気が付いた。うお!ほとんど1年も放置してた!?

ええと、この度(といっても10ヶ月前の)仕様変更は、user.jsによってunsafeWindowに不用意に関数を渡さないように!という趣旨のものである。セキュリティ向上のためなら、既存のuser.jsが多少動かなくなるとしても是非もなし。unsafeWindow関連の詳しい情報はこちら

で、GreaseSpot.netの情報によると、

  • GM_xmlhttpRequest
  • GM_getValue
  • GM_setValue
  • GM_getResourceURL (new in 0.8)
  • GM_getResourceText (new in 0.8)

上記5つについてはunsafeWindowから直接呼べなくなりました。

具体的には、

unsafeWindow.someAPIfunction = function() {
  GM_setValue("foo", "bar");
};

上記のように書いても動作しなくなりました。

じゃ、どうすればいいのかというと、

unsafeWindow.someAPIfunction = function() {
  window.setTimeout(function() {
    GM_setValue("foo", "bar");
  }, 0);
});

というようにwindow.setTimeoutにぶち込むことで実行可能になります。

私の場合は、LDRから直接はてブするlivedoor Reader 2 Hatena::Bookmark TagAutoCompと、LDR上でブコメを見るLDR HatebuComment Displayが動かなくなってました。対策は、

  1. GM_xmlhttpRequest を window.setTimeout で包み込む
  2. window.setTimeout の間に入った this を書き換える*1

以上。

インストールしたuser.jsがunsafeWindow絡みで動かなくて困ったときは、大体この二点ぐらいに着目して修正すれば再び動かすことぐらいはできるだろう。っていうか、ネット上でもあんまり誰も困ってないのが凄いと思った。みんなコレ(左腕で軽く作った力こぶを右手でバンバン叩きながら)持ってるんだねぇ。

まとめ

unsafeWindowの問題点を今まできちんと理解してなかった。反省。認証を必要とするサービス(はてブブクマ追加など)を全てのURLで動かしたい場合は、かなり注意が必要ですね。

気をつけよう バナナの売り切れと unsafeWindow

*1livedoor Reader 2 Hatena::Bookmark TagAutoCompについては、thisキーワードを消すだけで一応動くようにはなる。

tobytoby 2009/05/20 09:16 こんにちは。
リンク先のHatebuComment on LDRなのですが、上手く動かすことができません。
もしよろしければ、パッチか何かを公開していただけないでしょうか(´・ω・`)

AobaAoba 2009/05/20 20:16 id:toby さん、こんばんは。
私が適当に改変したHatebuComment on LDRのソースを今見てみたら、どうもunsafewindowと関係ないところで動かなくなっていたように思います。失礼しました…もう全然記憶になくて…。ソース公開しましたのでご確認ください。
http://lab.hon5.com/greasemonkey/hatebucomment_on_ldr.user.js
これ id:ABCbo さんにもIDコールで一応連絡します。気づいてくださると良いなあ。本家が変更されたことに気づいた時点で公開停止しまーす。

AobaAoba 2009/05/20 20:17 というか、コメント欄に書いたIDコールって機能するんだろうか…

ABCboABCbo 2009/05/21 11:42 id:Aoba さん、ちゃんとコメント欄のIDコールで連絡が来ました。
が、私の環境では2008年10月2日に最終更新をしてから、ずっとそのまま使えているので、何が問題なのか全然分かりません。

試しにAobaさんのhttp://lab.hon5.com/greasemonkey/hatebucomment_on_ldr.user.jsをインストールしてみたら動作しなかったので、
register_hook('after_init', function() {
});
という部分が消されているのが問題なのだと思います。

id:toby さんがインストールされたのがどちらか分かりませんが、http://userscripts.org/scripts/show/34576からインストールすれば動作するのではないかと思いますが…

AobaAoba 2009/05/21 11:49 おお、id:ABCbo さんありがとうございます。
考えてみたら、私は Fastladder を主に使用しているので、そのせいで何か違うかもしれません。register_hook があると動かなかったんですよね…何故か…原因究明してないのは私の問題です。
あとその部分とは別にコメント抽出の正規表現を変更してますが、本家のスクリプト
http://userscripts.org/scripts/show/34576
で動作しているということであれば、そちらの方が良いですね。id:tobyさんよろしくどうぞー

tobytoby 2009/05/22 01:35 こんにちは。idつけると通知がくるんですね^^;
私はFastladderだったのですが、
id:Aobaさんの↓のもので無事に動きました。
http://lab.hon5.com/greasemonkey/hatebucomment_on_ldr.user.js
逆に オリジナルのid:ABCboさんの最新版 http://userscripts.org/scripts/show/34576 のものは動かなかったのです…。
diffとったり比べてみて、再度試してみたのですが…。

とにかく動いて助かりました。
id:Aobaさん、id:ABCboさんありがとうございました。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Aoba/20081019/1224344013