我想知道,甚至可以将Xul Browser组件的请求视为打开一个新窗口吗?我尝试更改window.open函数,但看起来好像从未调用过。 在新窗口中打开的所有链接都不会在我的应用程序中打开。
我在主题上找到了this page,但提供的解决方案没有显示出不同的行为。
对此有任何提示吗?
(顺便说一句,我正在开发一个独立的应用程序,而不是Firefox的扩展程序)
答案 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
。