验证重定向 - 在Firefox扩展的新选项卡中打开本地HTML文档

时间:2012-05-22 14:57:52

标签: html firefox google-chrome-extension firefox-addon

我目前正在尝试将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的一部分。

出于好奇,我试着像这样硬编码网址:

http://myextension/content/options.html

用户实际上已成功通过身份验证,但之后重定向显然失败了。

Chrome扩展程序似乎无问题或奇怪的黑客攻击。据我所知,打开它是这样的:

chrome.tabs.create({"url":chrome.extension.getURL("options.html"), "selected":true});

稍后引用该标签的网址,以便我们可以重定向回到它,就像这样:

var options_url = chrome.extension.getURL('options.html');

所以,我想知道:在没有使用“chrome://”“协议”的情况下,在带有Firefox扩展的新标签页中打开本地HTML文档的最佳方法是什么?是否有类似的方式来处理Google Chrome扩展程序?

更新23/5/12

因此,本文称Chrome://网址无法通过网络访问,只能在本地访问。

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

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

更新07/6/12

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

用户输入运行我们应用程序的服务器的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

1 个答案:

答案 0 :(得分:0)

如果您尝试重定向OAuth调用,则应尝试使用Mozilla中的OAuthorizer,而不是自己进行重定向工作。希望有所帮助!

相关问题