mozilla Firefox、Thunderbird 52からのアドオン非動作(XPCOM廃止の影響)の解決策一例


はじめに

Firefox や Thunderbird 開発元である Mozilla は、XPCOM の(XULも?)廃止を予定しており、バージョン52で XPCOM の一部は廃止されました。古くから使用されてきている多数のアドオンが動かなくなったことと思います。
今後も続々と廃止になっていくようです(もちろん機能改善もあるのですが)

解決策の例

アドオンがうまく動かなくなった場合は、デバッグコンソール(Ctrl + Shift +J)を開いて、エラーメッセージからヒントを得ることができるでしょう。

"nsPreferences is not defined."

設定情報(設定エディタで読み書きできる例のもの)の取得・保存に  chrome://global/content/nsUserSettings.js 内にある nsPreferences を使用しているアドオンがあります。

let alwaysShown = nsPreferences.getBoolPref("extension.myaddon1.alwaysshown", false);

nsPreferences.setIntPref("extension.myaddon1.level", 10);

は、バージョン52以降エラーになります。これは、たとえば次のように書き換えることができます。

let prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

let alwaysShown = false;
if(prefs.getPrefType("extension.myaddon1.alwaysshown") == Components.interfaces.nsIPrefBranch.PREF_BOOL)
{
  alwaysShown = prefs.getBoolPref("extension.myaddon1.alwaysshown");
}

prefs.setIntPref("extension.myaddon1.level", 10);

さいごに

MDN サイトでの多数あるリンク切れが、プロジェクトの綻びをなんとなく感じさせてくれます(ボランティア活動で作られているので贅沢は言えませんが...)
"nsPreferences is not defined" でググると

「重宝していたアドオン『***』が使えなくなってしまいました。。作者さんからのメッセージでは『Firefox52以降のバージョンでは動作しません。すみませんが今後の対応予定はありません。』とありました。諦めるしかないのかもしれませんが、もう業務とどっぷりで、しかも代わりになるアドオンも見つからないのです(泣)寄付してもよいのでどなたか作ってください!!

といった叫びも見られます。視点を変えてみると、これはチャンスかも!?開発者でないあなたも、ばりばり開発者だけど Firefox アドオン開発には詳しくないあなたも、Firefox や XUL に詳しい開発者をつかまえて、協同して代替の先進的アドオンをリリースしてみてはいかがでしょう?

参考にした情報