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

はてなスクリーンショットで「ファイルに保存」ができない

javascript Firefox はてなスクリーンショット拡張

こんなのを書きました。

修正したコードのテストをしてて思い出したのだけれど、そう言えば「ファイルに保存」が機能しなかったなあ、と。
画面キャプチャするアドオンはいくつかあるけど、直接 フォトライフ にアップロードができるところが、はてなスクリーンショットの良いところなので、ファイルに保存することは滅多にないので忘れてたさ。

とりあえずエラーの確認

アドオンのデバッグの仕方を覚えたぼくには死角はない(なんてね)。
というわけで、ブラウザツールボックスのコンソールでエラーを確認。

NS_ERROR_XPC_NOT_ENOUGH_ARGS: Not enough arguments [nsIWebBrowserPersist.saveURI]     10-Manager.js:273:0

分かりやすいエラーメッセージだ。

一応、調べるよ

まずは、公式のドキュメントを確認するところから。

void saveURI(
        in nsIURI aURI,
        in nsISupports aCacheKey,
        in nsIURI aReferrer,
        in long aReferrerPolicy,
        in nsIInputStream aPostData,
        in string aExtraHeaders,
        in nsISupports aFile,
        in nsILoadContext aPrivacyContext
);

https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebBrowserPersist#saveURI%28%29

ああ、引数の数が合ってないじゃない(エラーメッセージのまんま)。
aReferrerPolicy Requires Gecko 36.0 とある第4引数が怪しい。
っていうか、developer.mozilla.org にあるサンプルコードも、引数が 7つしかないじゃない (´・ω・`)

他の似たようなアドオンでも、こんな指摘が。

Very nice, but a bit abandoned for now (manual fix for FF 36+ needed)
Need replacing this:
persist.saveURI(source, null, null, null, null, null, picker.file, privacyContext);
with this (one more null):
persist.saveURI(source, null, null, null, null, picker.file, privacyContext);

https://addons.mozilla.org/ja/thunderbird/addon/abduction/reviews/

ゴールは目前

chrome/content/browser/10-Manager.js の 273 行目、saveURI メソッドに引数を足してみる。

//              wbp.saveURI(uri, null, null, null, null, filePicker.file, privacyContext);
                wbp.saveURI(uri, null, null, null, null, null, filePicker.file, privacyContext);

いえーい。

修正を反映するためには、

  • xpinstall.signatures.required を false に変更して、署名検証をスキップする
  • Firefox の再起動

が、必要。

というわけで

Firefox 44 の対応を含めて、フィードバックしてもらえるように運営に お問い合わせしてみた。

あまりアドオンを入れる方ではないけれど、やっぱり、署名の検証をスキップするのは、できればしたくないしね。