GreaseMonkeyのGM_setValue()の値はどこに?

以前もご紹介した GreaseMonkey にて、GM_setValue() 関数がどこに値を保存するか、纏めてみました(Firefox のみ)。

以下、[@namespace]GreaseMonkey スクリプトのメタタグ@namespaceに設定した値、[@name]は同じく@nameに設定した値、[設定項目]GM_setValue("XXX", "YYY")XXXの部分、の意。
なお、これらの情報は今後の FireFoxGreaseMonkey のバージョンアップにより古くなる可能性があります。

GreaseMonkey ~1.12

試しに情報を調べようとすると、いまだに出てくるのがこれ。
現行バージョン(ver 2.2 現在)では使われていません。

  1. ロケーションバーに about:config を入力。警告が出ても華麗にスルーして設定一覧を表示。
  2. greasemonkey.scriptvals.[@namespace]/[@name].[設定項目]に保存されている。

なお、この値自体は FireFox のプロファイルフォルダ内に pref.js というファイルがあり、その中に書き込まれます。

GreaseMonkey 1.13~

プロファイルフォルダ内には gm_scripts というフォルダが存在します。
GreaseMonkey スクリプトはその中のフォルダに保存されていますが(基本的に、[@name] と一致)、それと同名の *.db ファイルが作られ、その中に保存されます。
SQLite 3 形式なので、SQLite Browser 等を用いて編集できます。

grant-none-shim.js を使う場合

GreaseMonkey 1.x では、GM_xxx()関数を使っている、@grantメタタグを設定していないスクリプトには、自動でその関数の利用権限が設定されていました。
GreaseMonkey 2.0 以降では、明示的に@grantメタタグを設定しなければ@grant noneとなり、GM_xxx()関数がundefinedとなるように変更されています。

grant-none-shim.js は、@grant noneを設定していても一部のGM_xxx()関数をエミュレートするようなスクリプトです。
このスクリプトはローカルストレージを利用してGM_setValue()をエミュレートしているので、保存先はプロファイルフォルダ内の webappsstore.sqlite ファイルとなります(これも SQLite 3 形式)。

  • scopeフィールド
    [Webサイトのドメイン名を反転させたもの].:[scheme]:[port]
    • [Webサイトのドメイン名を反転させたもの]は、例えば http://cflat-inc.hatenablog.com/ であれば "moc.golbanetah.cni-talfc" となります。
      たぶん、URL が後方から一致させてゆくものなので、最初から逆転させておくことで検索速度を向上させているのでしょう。
    • [scheme]は URL スキーム、すなわち "http" や "https" といった「URL の ":" より前の部分」です。
    • [port]はポート番号です。http であれば普通は 80 ですね。
  • keyフィールド
    • "***[@namespace]***[@name]***[設定項目]" のフォーマットです。
  • valueフィールド
    • GM_setValue()で設定した値が入ります。