Firefoxで独自プロトコルをハンドリングするアドオンを作成する
最近Firefoxの自作アドオンを作成しようといろいろやってみてるので、その一部の内容をブログに記しておく。
最終的に作りたいアドオンの内容はまだ公開できないのだけれど、技術的にやりたい要素としては大体以下の通り。
- 独自プロトコルを定義して、そのプロトコルに対するリクエストに対して、独自に作成したHTMLを返す。
- 予め指定されたhostに対するHTTPリクエストに対し、独自に作成したHTMLを返す。
- 全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はここから落とせます。