谁可以获得标签右键点击标签的索引,该标签触发标签上下文菜单。标签不是活动标签(不是selectedIndex
)?如何获取标签右键点击非活动标签的索引?
作为一个例子。无论右键单击哪个选项卡(活动/不活动)选项卡,“选项卡”上下文菜单中的“关闭选项卡”都可以工作。它如何获得正确的标签索引?
谁可以获得标签右键点击标签的索引,该标签触发标签上下文菜单。标签不是活动标签(不是selectedIndex
)?如何获取标签右键点击非活动标签的索引?
作为一个例子。无论右键单击哪个选项卡(活动/不活动)选项卡,“选项卡”上下文菜单中的“关闭选项卡”都可以工作。它如何获得正确的标签索引?
收听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
事件。
在任何情况下,请记住在卸载扩展程序时进行清理。
如何点击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);
}
event.target是可能的,但当子菜单介绍时变得复杂因为目标被嵌套。还有其他循环涉及到,例如做一个循环从API('tabContainer.childNodes')获取索引,并从另一个API('gBrowser.getBrowserAtIndex(i).currentURI')做另一个循环(以获得URL)看起来很浪费。除非我可以从公司API获得'currentURI'! – erosman 2014-10-06 06:51:52
在这里看到这个主题:http://forums.mozillazine.org/viewtopic.php?f=19&t=2792651&p=13310951有一个'.popupNode'属性,所以你不会弄乱子菜单:)让我知道这是否可行 – Noitidart 2014-10-06 21:44:00
谢谢......但[document.popupNode](https://developer.mozilla.org/en-US/docs/Web/API/document.popupNode) – erosman 2014-10-07 04:40:23
谢谢....似乎没有要在'menupopup ID = “tabContextMenu”'一个'contextTab'属性... undefined – erosman 2014-10-06 05:51:33
'TabContextMenu'(注意大写字母T)是ChromeWindow的全局变量。 – paa 2014-10-06 09:46:40
我错过了...... :)是的..这是一个..实际上'TabContextMenu.contextTab._tPos'是我想要的一个..谢谢 – erosman 2014-10-06 11:59:57