2010-11-26 75 views
4

我想知道,是否可以将Xul浏览器组件的请求视为打开一个新窗口?我试着改变window.open函数,但看起来像它从未被调用过。 所有在新窗口中打开的链接都不会在我的应用程序中打开。如何从XUL浏览器打开新窗口?

我发现this page的主题,但提供的解决方案没有显示不同的行为。

对此有何暗示?

(顺便说一下,我正在开发一个独立的应用程序,而不是Firefox的扩展)

回答

1

我假设你是在一个应用程序的XULRunner,而且你要加载从非铬源的镀铬URL在浏览器(如HTTP或本地文件)。虽然启用UniversalXPConnect和UniversalBrowserWrite可能会有所帮助,但它们也具有安全风险(因为Web上的任意脚本都可以使用它们),所以它们往往会在浏览器中被禁用(例如,在Firebug中运行该行会给您一个例外):

>>> netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite"); 
Error: A script from "http://stackoverflow.com" was denied UniversalXPConnect UniversalBrowserWrite privileges. 

你如何尝试使用代码库安全主体,看看是否有所作为? (http://www.mozilla.org/projects/security/components/signed-scripts.html#codebase)。对于我来说,在Firebug中,我确实可以通过一个大的,令人讨厌的对话框来获得额外的权限),但仍然无法使用window.open打开Chrome网址。下一步可能是尝试更改conf文件以使用可访问的内容,以便访问内容的相关部分(请参阅https://developer.mozilla.org/en/Chrome_Registration#contentaccessible)。

为了避免提升权限时的恶意邮件,您可以尝试自动设置正确文件的权限,如http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555所述。

此外,请确保您检查浏览器类型(https://developer.mozilla.org/zh/XUL/Attribute/browser.type)。如果浏览器类型不是Chrome浏览器,那么可能值得尝试使其成为Chrome浏览器并查看是否有所作为。

如果我的任何假设是错误的回到我身上,我会尝试别的。

0

不正常的js不工作?

window.open(url,windowname,flags); 
+0

是*(评论中字符的最小值是15,你不讨厌这个吗?)* – 2010-12-09 16:18:23

+0

另外,我试着将我的函数归属于window.open,所以我可以看看它是否被调用,而不是。 – 2010-12-09 16:22:00

0

我知道有两种方法。

第一种是将browser.chromeURL首选项设置为包含<browser type="content-primary">的镶边网址。内容窗口尝试打开的页面将加载到给定的浏览器中。

第二个是使用您定义的对象来设置属性window.browserDOMWindow以实现nsIBrowserDOMWindow接口。如果您正在使用选项卡式界面,则可以将打开的呼叫转移到选项卡中。注意:必须将选项卡式浏览首选项设置为允许窗口转到选项卡,否则XULrunner将退回browser.chromeURL

相关问题