如何从XUL浏览器打开新窗口?

时间:2010-11-26 11:40:27

标签: browser xul xulrunner

我想知道,甚至可以将Xul Browser组件的请求视为打开一个新窗口吗?我尝试更改window.open函数,但看起来好像从未调用过。 在新窗口中打开的所有链接都不会在我的应用程序中打开。

我在主题上找到了this page,但提供的解决方案没有显示出不同的行为。

对此有任何提示吗?

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

3 个答案:

答案 0 :(得分:1)

我假设您使用的是XULRunner应用程序,并且您正尝试从浏览器中的非Chrome来源(例如HTTP或本地文件)加载Chrome网址。虽然启用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 URL。下一步可能是尝试更改您的配置文件以使用contentaccessible,以便可以访问您内容的相关部分(请参阅https://developer.mozilla.org/en/Chrome_Registration#contentaccessible)。

为了避免在提升权限时出现令人讨厌的消息,您可以尝试按照http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555中的说明自动设置正确文件的权限。

另外,请务必检查浏览器类型(https://developer.mozilla.org/en/XUL/Attribute/browser.type)。如果浏览器类型不是chrome,那么可能值得尝试将其设为chrome并查看是否会产生影响。

如果我的任何假设错误,请回复我,我会尝试别的。

答案 1 :(得分:0)

普通的js不起作用吗?

window.open(url,windowname,flags);

答案 2 :(得分:0)

我知道有两种方式。

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

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