【问题标题】:Opening a URL in current tab/window from a Firefox Extension从 Firefox 扩展在当前选项卡/窗口中打开 URL
【发布时间】:2008-11-23 15:35:21
【问题描述】:

我正在创建一个 Firefox 扩展...从菜单项在当前选项卡中打开 URL 的 javascript 是什么?

例如在我的 overlay.xul 文件中,我有以下行:

<menuitem label="Visit homepage" oncommand="window.location='http://www.somepage.com'"/>

但在 Firefox 中,当我单击菜单项时,它会打开 URL,但会破坏浏览器的整个布局。

这样做的正确方法是什么?

【问题讨论】:

    标签: javascript firefox xul


    【解决方案1】:

    浏览了一圈,我发现我不得不把上面的代码替换成这样:

    <menuitem label="Visit homepage" oncommand="content.wrappedJSObject.location='http://www.somepage.com'"/>
    

    【讨论】:

    • 我要注意的一点是,您可能希望创建一个处理此问题的 JavaScript 函数,以防万一您想将它用于整个扩展程序中的其他点击事件!
    【解决方案2】:

    您可以从菜单项中使用 openUILinkIn。它的工作原理是:

    openUILinkIn(url, where);
    

    其中可以是:选项卡、当前、窗口(以及其他一些很少使用的选项)

    如果您想根据用户按下的键盘修饰符做出不同的行为,您可以使用另一个函数 whereToOpenLink,它会根据用户的偏好和修饰符返回选项卡/当前/窗口。 p>

    openUILinkIn(url, whereToOpenLink(event));
    

    因此我使用:

    <menuitem label="Visit homepage" 
              oncommand="openUILinkIn('http://example.com/', whereToOpenLink(event))"/>
    

    如果您不在菜单项的上下文中,您可能需要查看另一个为标签添加链接和打开 HREF 的内置 XBL:

    <label value="google" class="text-link" href="http://google.com/" />
    

    【讨论】:

    • 你从哪里得到这个方法的信息?我一直在徒劳地寻找一些关于在 FF 扩展中使用 Javascript 可以做什么的实际文档。
    • @Zark developer.mozilla.org 是最好的地方,尽管一开始可能很难找到自己的路。将developer.mozilla.org/en/Code_snippets 加入书签总是好的。
    【解决方案3】:
    <menuitem label="Visit Report Site" oncommand="var win = Components.classes['@mozilla.org/appshell/window-mediator;1']
    .getService(Components.interfaces.nsIWindowMediator)
    .getMostRecentWindow('navigator:browser'); win.openUILinkIn('http://www.google.com', 'tab');"/>
    

    在新标签页中打开网址。

    【讨论】:

      【解决方案4】:

      在你的命令上调用这个 JS 函数

      //open a url current window:
      function openUrl(url) {
      content.wrappedJSObject.location = url;
      newTabBrowser = gBrowser.selectedBrowser;
      newTabBrowser.addEventListener("load", highlight, true);
      }
      
      //new tab
      function openUrlNewTab(url) {
      var win = Components.classes['@mozilla.org/appshell/window-mediator;1']
                  .getService(Components.interfaces.nsIWindowMediator)
                  .getMostRecentWindow('navigator:browser');
      win.gBrowser.selectedTab = win.gBrowser.addTab(url);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多