遥かへのスピードランナー

シリコンバレーでAndroidアプリの開発してます。コンピュータービジョン・3D・アルゴリズム界隈にもたまに出現します。

Firefoxで独自プロトコルをハンドリングするアドオンを作成する

最近Firefoxの自作アドオンを作成しようといろいろやってみてるので、その一部の内容をブログに記しておく。

最終的に作りたいアドオンの内容はまだ公開できないのだけれど、技術的にやりたい要素としては大体以下の通り。

  1. 独自プロトコルを定義して、そのプロトコルに対するリクエストに対して、独自に作成したHTMLを返す。
  2. 予め指定されたhostに対するHTTPリクエストに対し、独自に作成したHTMLを返す。
  3. 全HTTPリクエストに対して、指定されたHTTPヘッダを付与する。

このうち、まず1番目を実装する為、以下を参考にした。

和訳:Firefoxで独自プロトコルを定義する方法 - outsider reflex
原文:Adding a New Protocol to Mozilla

ここで掲載しているjavascriptコードをアドオンにパッケージングすれば、x-search:hogeみたいなURIを打ち込むと、自動的にサーチエンジンに渡してくれる動きをするらしいのだが、どうもうまく動かない。<



上記のように「x-search:hoge」とアドレスバーに入力すると、以下のメッセージがエラーコンソールに出力される。

エラーメッセージ:document is not defined.
どうやらdocumentオブジェクトがjavascript内で取得できていない模様。

詳しい仕組みまでは理解していないけど、XPCOMコンポーネントの中で、現在のドキュメントオブジェクトを取得できないので、注意する必要がある。


この場合は、転送先のURLが決まっているので

125行目: return ios.newChannel("javascript:document.location.href='" + finalURL + "'", null, null);

じゃなくて、

125行目: return ios.newChannel(finalURL, null, null);

みたいに書けばいい。
修正したjavascriptここから落とせます。