代码之家  ›  专栏  ›  技术社区  ›  Student

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

  •  4
  • Student  · 技术社区  · 14 年前

    我想知道,是否可以处理Xul浏览器组件打开新窗口的请求?我试图更改window.open函数,但看起来它从未调用过。 在新窗口中打开的所有链接都不会在我的应用程序中打开。

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

    有什么线索吗?

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   Jonathan Morgan    14 年前

    我假设您在一个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.
    

    你试着使用codebase安全主体看看会不会有什么不同?(http://www.mozilla.org/projects/security/components/signed scripts.html#codebase)。对我来说,在Firebug中,它确实允许我在用一个大的、讨厌的对话框确认后获得额外的权限,但仍然不允许我用window.open打开一个Chrome URL。下一步可能是尝试将conf文件更改为使用content accessible,以便可以访问内容的相关部分(请参见 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,看看这是否会产生影响。

    如果我的任何假设是错误的,回到我身边,我会尝试其他的。

        2
  •  0
  •   Jinesh Parekh    14 年前

    正常的js不工作吗?

    window.open(url,windowname,flags);
    
        3
  •  0
  •   Neil    14 年前

    我知道有两种方法。

    首先是设置 browser.chromeURL 对包含 <browser type="content-primary"> . 内容窗口试图打开的页将加载到给定的浏览器中。

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