読者です 読者をやめる 読者になる 読者になる

Firefox Add-on SDK で謎のエラーメッセージが出力された時の対策

firefox

エラーの内容

Jetpack SDK 0.4 で cfx コマンドのユーザ定義オプションを設定する 等にもあるように、Add-on SDKで開発する時は、専用のプロファイルを用意しておくと色々と楽。 (Jetpackは昔のAdd-on SDKの名前ね、JetpackでもAdd-on SDKでも、同じものを差していると思ってほぼ問題ないはず。)

バグなのか自分の使い方が悪いのか、しばらく使っているとAdd-on SDKから不可解なエラーメッセージが出力される時がある。

(addon-sdk-1.0b4)$ cfx test
Using binary at '/Applications/Firefox.app/Contents/MacOS/firefox-bin'.
Using profile at '/Users/ongaeshi/Library/Application Support/Firefox/Profiles/1k45yor8.develop'.
Running tests on Firefox 4.0.1/Gecko 2.0.1 ({ec8030f7-c20a-464f-9b0e-13a3a9e97384}) under Darwin/x86_64-gcc3.
.....................console: [JavaScript Warning: "'font' の値をパース中にエラーが発生しました。  このスタイル宣言は無視されました。" {file: "http://www.yahoo.co.jp/" line: 11}]
console: [JavaScript Warning: "スタイル宣言であるべきところが '*' になっています。  これを無視して次のスタイル宣言を処理します。" {file: "http://www.yahoo.co.jp/" line: 11}]
.
.
console: [JavaScript Warning: "'filter' の値をパース中にエラーが発生しました。  このスタイル宣言は無視されました。" {file: "http://www.yahoo.co.jp/" line: 11}]
console: [JavaScript Warning: "スタイル宣言であるべきところが '*' になっています。  これを無視して次のスタイル宣言を処理します。" {file: "http://www.yahoo.co.jp/" line: 11}]
.
.
console: [JavaScript Warning: "不明なプロパティ 'zoom' が使用されています。  このスタイル宣言は無視されました。" {file: "http://www.yahoo.co.jp/" line: 11}]
.
.
console: [JavaScript Warning: "スタイル宣言であるべきところが '*' になっています。  これを無視して次のスタイル宣言を処理します。" {file: "http://www.yahoo.co.jp/" line: 11}]
.console: [JavaScript Warning: ... Traceback (most recent call last):
  File "/Users/ongaeshi/app/addon-sdk-1.0b4/bin/cfx", line 29, in <module>
    cuddlefish.run()
  File "/Users/ongaeshi/app/addon-sdk-1.0b4/python-lib/cuddlefish/__init__.py", line 695, in run
    addons=options.addons)
  File "/Users/ongaeshi/app/addon-sdk-1.0b4/python-lib/cuddlefish/runner.py", line 276, in run_app
    time.sleep(0.05)
KeyboardInterrupt
(addon-sdk-1.0b4)$ 

とか、

(addon-sdk-1.0b5)$ cfx run -p /Users/ongaeshi/Library/Application Support/Firefox/Profiles/1k45yor8.develop
Using binary at '/Applications/Firefox.app/Contents/MacOS/firefox-bin'.
Using profile at '/Users/ongaeshi/Library/Application Support/Firefox/Profiles/1k45yor8.develop'.
TypeError: loader.console is undefined (resource://jid0-seifaydckhvdzhihlua8wnsduu4-api-utils-lib/cuddlefish.js:188)
stack:
allowImport([object Object],"resource://jid0-seifaydckhvdzhihlua8wnsduu4-api-utils-lib/plain-text-console.js","chrome",null,[object Object])@resource://jid0-seifaydckhvdzhihlua8wnsduu4-api-utils-lib/cuddlefish.js:188
syncRequire("chrome")@resource://jid0-seifaydckhvdzhihlua8wnsduu4-api-utils-lib/securable-module.js:301
asyncRequire("chrome")@resource://jid0-seifaydckhvdzhihlua8wnsduu4-api-utils-lib/securable-module.js:317
@:0

FAIL
Total time: 1.321938 seconds
Program terminated unsuccessfully.

とか。こんなのがいきなり出たらパニックになります、でも慌てないで。

そんな時はプロファイルを作り直すのが吉

なんとなく、自分のしこんだエラーじゃないなあと感じたら、プロファイルが何かの拍子に壊れてしまった可能性が高い。

addon-sdk-1.0b5/local.json を見て、使ってるプロファイルを調べる。私の環境の場合は 1k45yor8.develop がデフォルト。

{
  "configs": {
    "default": [
      "-p", "/Users/ongaeshi/Library/Application Support/Firefox/Profiles/1k45yor8.develop/"
    ],
    "test": [
      "-p", "/Users/ongaeshi/Library/Application Support/Firefox/Profiles/rqz81337.test/"
    ]
  }
}

1k45yor8.develop1k45yor8.develop.old 等に名前変更

(addon-sdk-1.0b5)$ cd ~/Library/Application Support/Firefox/Profiles/
(addon-sdk-1.0b5)$ mv 1k45yor8.develop 1k45yor8.develop.old # プロファイルの名前を変更(要らなければ消してもよい)

再度 cfx runを実行すると、プロファイルが作り直される。

(addon-sdk-1.0b5)$ cfx run

これで、大抵の場合上手くいくはず。