※2014年10月16日追記:Scriptishの問題はNightly Releaseの導入で解決した。

----

Firefox32になってから、自作のGreasemonkeyスクリプトがScriptishで動かなくなった。@grantを指定してやってもGreasemonkey APIを認識しない。GM_XmlhttpRequestが動いてくれないとどうにもならないスクリプトなので大変困る。


Scriptishは、当時開発が停滞していた本家Greasemonkeyのフォークとして開発されて、本家よりも高機能なことが売りだったはずなのだが、結局、こっちも開発が止まってしまって、現在は、開発を再開した本家Greasemonkeyの方が活発に更新が行われているという状況である。

Xubuntu14.04 + Firefox28.0で試したところ、Greasemonkey1.15はGreasemonkey APIが機能せず、また、いくつかのスクリプトがまともに動いてくれなかった。Scriptishでは問題なく動くことが確認できたので、以降、Scriptish上でスクリプトを動かしていたのだけど、ついにFirefoxのアップデートに追随できなくなったかと。


仕方がないのでGreasemonkeyを再インストールしてみたけど、やっぱり動かない。


…と、半ば諦めていたのだけど、念の為debugをかけてみて、APIとは無関係の部分に問題があったことに気付いた。とあるurl文字列の生成用に、一部、ランダムな文字列を返す関数を作って使っているのだけど、例えば、

var FUNC = function(){
    return 'hoge';
}

という感じ関数オブジェクトを作成して、

console.log(FUNC+'test');

とすると、これまでは関数の返り値と解釈して「hogetest」という文字列が出力されていたのが、Firefox 32になってからは関数文字列(function(){…})がそのまま出力されるようになった。それでスクリプトがエラーを起こしていたらしい。

この部分に括弧を追加する修正を行ったところ、Greasemonkeyでも問題なくGM_XmlhttpRequestでデータ取得ができるようになった。ヨカッタ…。

試しにScriptishの方でも同様の修正を行ってデータ取得を試みたが無反応なので、やはりScriptishの方はFirefox 32においてはGM_XmlhttpRequestの使用に対応してはいないようだ。


少し奇妙なのは、Scriptishで、GM_XmlhttpRequestは使えなくなったけれど、GM_logは普通に使えるところ。一方で、Greasemonkeyの方はGM_logで出力してもコンソールには何も表示されない。

console.logがあれば足りるので実用上困ることは無いものの、実のところ、Linux版Firefox 32 + GreasemonkeyでGreasemonkey APIがいっこも使えないと勘違いした理由は、GM_logが動かなかったからなんで、twitterでおもくそデマっちゃったけど、僕は悪くない。


…勘違いといえば、Firefoxでのスクリプト開発の断念を検討中、Google ChromeでもGreasemonkeyスクリプトを使う方法があったことを思い出して、ChromiumにTampermonkeyなる拡張機能を導入してみたのだけど、今のはGreasemonkey APIを使ったスクリプトでも普通にそのまま動くんだな。

確かGM_XmlhttpRequestとかはクロスドメイン制約の問題で使用できなかったように記憶していたのだが。

移行を検討してもいいけどChromiumあまり好きじゃないんだよな。




読まれている記事




※Amazonアソシエイト・プログラムに参加しています。