2014-10-05 75 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