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

firefox gbrowser.getbrowserfortab但没有gbrowser.gettabforbrowser?

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

    在用于火狐扩展的javascript中,您可以调用 gBrowser.getBrowserForTab 但是没有 gBrowser.getTabForBrowser . 所以我写了自己的代码,它也能工作,我只是好奇是否有什么原因我不应该这样做,或者代码有什么问题。以下是我的 init 在窗口加载时调用的方法。

    gBrowser.getTabForBrowser = function(browser) {
      for (var i=0; i<gBrowser.browsers.length; i++) {
        if (gBrowser.getBrowserAtIndex(i) === browser) {
          return gBrowser.tabContainer.getItemAtIndex(i);
        }
      }
      return null;
    }
    

    (或者应该是) gBrowser.prototype.getTabForBrowser = ... ?)

    1 回复  |  直到 14 年前
        1
  •  3
  •   MooGoo    14 年前

    据我所知,没有内置的 getTabForBrowser 功能,所以你必须自己滚动。但是,您的代码假定浏览器节点与选项卡节点以相同的DOM顺序存储。我不能确定这个假设是否被打破,但是考虑到标签可以被用户任意地重新定位,这不是我所依赖的。

    幸运的是,每个选项卡对象都有一个 linkedBrowser 财产。所以你可以这样重写你的代码:

    gBrowser.getTabForBrowser = function(browser) {
      var mTabs = gBrowser.mTabContainer.childNodes;
      for (var i=0, i<mTabs.length; i++) {
        if (mTabs[i].linkedBrowser == browser) {
          return mTabs[i];
        }
      }
      return null;
    }