我想知道,是否甚至可以处理对 Xul 浏览器组件打开新窗口的请求?我尝试更改 window.open 函数,但看起来它从未被调用过。在新窗口中打开的所有链接都没有在我的应用程序中打开。
我在该主题上找到了此页面,但提供的解决方案没有显示不同的行为。
对此有任何提示吗?
(顺便说一句,我正在开发一个独立的应用程序,而不是 Firefox 的扩展)
我假设您在 XULRunner 应用程序中,并且您正在尝试从浏览器中的非 Chrome 源(例如 HTTP 或本地文件)加载 chrome URL。虽然启用 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。下一步可能是尝试更改您的 conf 文件以使用 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 并查看是否有所不同。
如果我的任何假设是错误的,请回复我,我会尝试其他方法。
普通的js不行吗?
window.open(url,windowname,flags);
我知道有两种方法。
第一个是将browser.chromeURL
首选项设置为包含<browser type="content-primary">
. 内容窗口试图打开的页面将加载到给定的浏览器中。
第二种是window.browserDOMWindow
使用您定义的用于实现nsIBrowserDOMWindow
接口的对象来设置属性。如果您使用选项卡式界面,这允许您将打开的呼叫转移到选项卡中。注意:选项卡式浏览首选项必须设置为允许将窗口转移到选项卡中,否则 XULrunner 将退回到browser.chromeURL
.