Firefox gBrowser.getBrowserForTab, но нет gBrowser.getTabForBrowser? - PullRequest
4 голосов
/ 30 июля 2010

В Javascript для расширения Firefox вы можете позвонить 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 Ответ

3 голосов
/ 30 июля 2010

Насколько я знаю, нет встроенной функции 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...