#はじめに
Firefox や Thunderbird 開発元である Mozilla は、XPCOM の(XULも?)廃止を予定しており、バージョン52で XPCOM の一部は廃止されました。古くから使用されてきている多数のアドオンが動かなくなったことと思います。
今後も続々と廃止になっていくようです(もちろん機能改善もあるのですが)
- 拡張機能のバイナリコンポーネント対応が廃止されます - modest (mozilla developper's site)
- [XULとの決別、XPCOMの廃止はありえるのか?] (http://d.hatena.ne.jp/teramako/20100107/p1) - teramako さん
- MozillaはXUL廃止を本当に実行に移すのだろうか - Schuzak.jp さん
- モジラ、アドオン開発の変更計画を発表--XUL/XPCOMを非推奨へ - ZDNet Japan
#解決策の例
アドオンがうまく動かなくなった場合は、デバッグコンソール(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 に詳しい開発者をつかまえて、協同して代替の先進的アドオンをリリースしてみてはいかがでしょう?
#参考にした情報
- prefs.js に設定を保存する・設定を読み込む - piro さん(XUL開発情報ページ)
- nsPreferences -> nsIPrefService への移行 - GitHub thorikawa さん
- Preferences - MDN
- nslPrefBranch - MDN