在Javascript for 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 = ...
?)
答案 0 :(得分:3)
据我所知,没有内置getTabForBrowser
功能,所以你必须自己动手。但是,您的代码假定浏览器节点以与Tab节点相同的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;
}