3

現在、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

4

1 に答える 1

0

OAuth呼び出しに対してこのリダイレクトを実行しようとしている場合は、リダイレクト作業を自分で実行するのではなく、MozillaのOAuthorizerを使用してみてください。お役に立てば幸いです。

于 2012-07-18T00:32:43.633 に答える