誰可以獲得標籤右鍵點擊標籤的索引,該標籤觸發標籤上下文菜單。標籤不是活動標籤(不是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