3

我目前正在尝试将 Chrome 扩展移植到 Firefox。

Chrome 扩展程序有一个“登录”页面,该页面以 HTML 文档的形式在新选项卡中打开。HTML 文档与其他扩展文件一起存储在本地目录中。用户输入一个 URL,该 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 中,以便用户可以在身份验证成功后被重定向回来。身份验证失败,“chrome://”作为 URL 的一部分。

只是出于好奇,我尝试像这样对 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://”“协议”的情况下,使用 Firefox 扩展在新选项卡中打开本地 HTML 文档的最佳方法是什么?是否有类似的方法可以使用 Google Chrome 扩展来完成?

更新 23/5/12

所以这篇文章说 chrome:// URL 不能从网络访问,只能在本地访问。

http://adblockplus.org/blog/web-pages-accessing-chrome-is-forbidden

我认为这可能是我的身份验证失败的原因。我肯定在寻找一种方法让我的扩展程序在不使用 chrome:// 的情况下在窗口或选项卡中显示本地 HTML 文件。

2012 年 7 月 6 日更新

这是我的(希望是临时的)解决方案:

用户输入运行我们应用程序的服务器的 URL。他/她被重定向到应用程序登录页面,但我没有传递“chrome://myextension/content/options.html”作为身份验证后重定向回的 URL,而是传递了一个虚假的 URL,即“http:/ /myextension/thisis/madeup.html”。

在我的扩展程序的 overlay.js 中,我设置了一个 HTTP 请求侦听器,它侦听被请求的虚假 URL。当虚假 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 回答