2014-10-05 77 views
0

谁可以获得标签右键点击标签的索引,该标签触发标签上下文菜单。标签不是活动标签(不是selectedIndex)?如何获取标签右键点击非活动标签的索引?

作为一个例子。无论右键单击哪个选项卡(活动/不活动)选项卡,“选项卡”上下文菜单中的“关闭选项卡”都可以工作。它如何获得正确的标签索引?

回答

1

收听tabContextMenu元素的popupshown事件。

由于这是一个无重启的插件,我假设你已经有了ChromeWindow的引用。

var tabContextMenu = chromewin.document.getElementById("tabContextMenu"); 
tabContextMenu.addEventListener("popupshown", function(){ 
    var rightclickedtab = chromewin.TabContextMenu.contextTab; 
    // now proceed as you wish 
}, false); 

您还可以添加自己的菜单项并监听其command事件。

在任何情况下,请记住在卸载扩展程序时进行清理。

+0

谢谢....似乎没有要在'menupopup ID = “tabContextMenu”'一个'contextTab'属性... undefined – erosman 2014-10-06 05:51:33

+1

'TabContextMenu'(注意大写字母T)是ChromeWindow的全局变量。 – paa 2014-10-06 09:46:40

+0

我错过了...... :)是的..这是一个..实际上'TabContextMenu.contextTab._tPos'是我想要的一个..谢谢 – erosman 2014-10-06 11:59:57

0

如何点击event.target,它是tab元素,然后遍历该选项卡元素的parentNode,该元素具有选项卡的childNoedes。那么在那里找到你的event.target?

所以舔加上点击听众和做到这一点:

var foundAtIndex = -1; 
var tab = event.target; 
var tabContainer = tab.parentNode; 
var tabs = tabContainer.childNodes; 
for (var i=0; i<tabs.length; i++) { 
if (tabs[i] == tab) { 
foundAtIndex = i; 
break; 
} 
} 

if (foundAtIndex !== -1) { 
console.error('very weird, tab not found'); 
} else { 
console.info('tab found at index:', foundAtIndex); 
} 
+0

event.target是可能的,但当子菜单介绍时变得复杂因为目标被嵌套。还有其他循环涉及到,例如做一个循环从API('tabContainer.childNodes')获取索引,并从另一个API('gBrowser.getBrowserAtIndex(i).currentURI')做另一个循环(以获得URL)看起来很浪费。除非我可以从公司API获得'currentURI'! – erosman 2014-10-06 06:51:52

+0

在这里看到这个主题:http://forums.mozillazine.org/viewtopic.php?f=19&t=2792651&p=13310951有一个'.popupNode'属性,所以你不会弄乱子菜单:)让我知道这是否可行 – Noitidart 2014-10-06 21:44:00

+0

谢谢......但[document.popupNode](https://developer.mozilla.org/en-US/docs/Web/API/document.popupNode) – erosman 2014-10-07 04:40:23