現在、Chrome 拡張機能を Firefox に移植しようとしています。
Chrome 拡張機能には「ログイン」ページがあり、新しいタブで HTML ドキュメントとして開かれます。HTML ドキュメントは、他の拡張ファイルとともにローカル ディレクトリに保存されます。ユーザーは、アプリケーションを実行しているサーバーを表す URL を入力します。ここで、ユーザーはログインを求められます。ログインに成功すると、ユーザーは options.html ページにリダイレクトされ、ユーザーの設定を表示するように更新されます。
これを Firefox 拡張機能で複製したいと考えています。つまり、オプション ページを作成するために XUL で何かを記述することは避けたいと考えています。
次のような HTML ページで新しいタブを開こうとしました。
var url = "chrome://myextension/content/options.html";
var win = Components.classes['@mozilla.org/appshell/window-mediator;1']
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow('navigator:browser');
win.gBrowser.selectedTab = win.gBrowser.addTab(url);
しかし、私はいくつかの理由でこれが好きではありません: 1) 新しいタブのナビゲーション バーに "chrome:// ..." URL が表示され、2) 認証プロセスが中断されます。認証は OAuth タイプ システムを使用して行われ、現在の URL が API に渡されるため、認証が成功するとユーザーはリダイレクトされます。URL の一部に「chrome://」が含まれていると、認証に失敗します。
好奇心から、次のように URL をハードコーディングしてみました。
http://myextension/content/options.html
ユーザーは実際には正常に認証されますが、その後、リダイレクトは明らかに失敗します。
Chrome 拡張機能は、問題や奇妙なハックなしで動作するようです。私が知る限り、開くと次のように機能します。
chrome.tabs.create({"url":chrome.extension.getURL("options.html"), "selected":true});
そして、後でタブの URL を参照して、リダイレクトして戻すことができるようにすると、次のように機能します。
var options_url = chrome.extension.getURL('options.html');
だから、私は疑問に思っています: "chrome://" "protocol" を使用せずに、Firefox 拡張機能を使用して新しいタブでローカル HTML ドキュメントを開く最良の方法は何ですか? Google Chrome 拡張機能を使用して行う方法と同様の方法はありますか?
更新 23/5/12
したがって、この記事では、chrome:// URL は Web からはアクセスできず、ローカルでのみアクセスできると述べています。
http://adblockplus.org/blog/web-pages-accessing-chrome-is-forbidden
これが、認証が失敗した理由である可能性があると思います。拡張機能で、chrome:// を使用せずにローカルの HTML ファイルをウィンドウまたはタブに表示する方法を探しています。
2012 年 7 月 6 日更新
これが私の(うまくいけば一時的な)解決策です:
ユーザーは、アプリケーションを実行しているサーバーの URL を入力します。彼/彼女はアプリケーションのログイン ページにリダイレクトされますが、認証後にリダイレクトされる URL として「chrome://myextension/content/options.html」を渡す代わりに、偽の URL、つまり「http:/ /myextension/thisis/madeup.html".
拡張機能の overlay.js で、リクエストされた偽の URL をリッスンする HTTP リクエスト リスナーを設定しました。偽の URL に対して GET が発生すると、リクエストをキャンセルし、ローカルに保存された実際のページ (「chrome://myextension/content/options.html」) を開きます。
次のリファレンスを参照してください。
https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIObserver https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads#HTTP_Observers