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

Thnderbird拡張機能を強制VerUPで試したこと

●対象
総務省迷惑メール情報提供用プラグイン
http://plugin.antispam.go.jp/
(Thnderbirdでは「拡張機能」として追加されます)


Ver3.1.Xまでしか対応せず、早く上位バージョン対応しないかなーと思ってたら
Thnderbirdの方が7から8にあがってしまい、仕方ないのでプラグインを強制的に対応させてやろうか、が発端。


やることは画面で指定されたメールを所定アドレスへ転送するだけなので
Thnderbird本体の特有機能をゴリゴリ使うわけではないので、サクっといけるかなーと見込んでましたが
結論無理でした。


ちなみに上記ページでDLできるThnderbirdプラグインは見慣れない拡張子ですがZIP圧縮されたファイルなので、拡張子書き換えれば解凍できます。



●プラグイン本体の場所
Win7の場合
C:\Users\ユーザ名\AppData\Roaming\Thunderbird\Profiles\英数字.default\extensions


WinXPの場合(想定)
C:\Documents and Settings\ユーザ名\Local Settings\Thunderbird\Profiles\英数字.default\extensions



●プラグインの対応Versionを変更する
extensionsフォルダ配下に「spamsender-tb@antispam.go.jp」というフォルダがありinstall.rdfというファイルがあるのでテキストエディタを開き、以下を変更する。

<em:maxVersion>3.1.*</em:maxVersion>

<em:maxVersion>8.1.*</em:maxVersion>

ここを変更すると、Thnderbird起動時に拡張機能がチェックされ、対応していないバージョンのものは無効にされるのがされなくなります。



●修正したとこ(ここから下は的外れな可能性大)
Version対応変更のみで拡張機能を動かすと
「engine undefined」とメッセージボックスが出ます。


というわけで以下のファイルを確認すると(XML内にJavaScriptが記載されたmozillaフレームワーク用のスクリプトファイル)
spamsender-tb@antispam.go.jp\chrome\content\spamsender.xul

  var engine = Components.classes["@antispam.go.jp/SpamSender/ISpamSenderTB;1"].createInstance(Components.interfaces.ISpamSenderTB);

ここで変数engineを定義してるけどもCreateInstanceから何も返ってこないので以降の処理中でengineを呼び出す時にコケてるようです。


で、Components.classesをゴリゴリとループして列挙してみたところ
"@antispam.go.jp/SpamSender/ISpamSenderTB;1"が存在しないので、多分どっかでこれを定義してやらないといけないと思いますが、ここで調査を中断しました。
ちなみに上記の列挙では"@mozilla.org/*"が大量に出てきたので、Componentsとして読み込ませてやらないとプラグインがThnderbirdから呼び出せないんだと思います。



気が向いたら、また試してみます。



PS.どーでもいいけどmozillaのアドオン開発関連は日本語情報少なすぎるぞ...。



追記:はてブに指摘ある通りバイナリ(DLL)が拡張機能のファイル一式内に含まれてます。
ただ、DLLが動かなくなる要因だとしたらThnderbirdのアップデートよりOSのAPIが呼べなくなるようなOSサイド要因だと思うので、多分そのDLLをThnderbirdで認識できなくなったんだろうと想定していて
なのでDLL自体にはメスを入れてません。一応補足。