2014-10-05 2 views
0

Кому нужна вкладка «Индекс» щелчка правой кнопкой мыши, которая запускает контекстное меню Tab. Вкладка НЕ ​​активная вкладка (не selectedIndex)?Как получить вкладку Индекс правой нажатой неактивной вкладки?

В качестве примера. «Закрыть вкладки вправо» в контекстном меню вкладки работает независимо от того, какая вкладка (активная/неактивная) нажата правой кнопкой мыши. Как он получает правильный индекс вкладки?

ответ

1

Слушайте для события popupshown элемента tabContextMenu.

С тех пор как без перезапуска аддон я предполагаю, что у вас уже есть ссылка на ChromeWindow.

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

Вы также можете добавить свой собственный пункт меню и слушать его command события.

В любом случае не забудьте очистить, когда ваше расширение будет выгружено.

+0

Спасибо .... Там, кажется, не быть 'contextTab' свойство в' menupopup ид = «tabContextMenu» '... undefined – erosman

+1

'TabContextMenu' (обратите внимание на столицу T) является глобальной переменной ChromeWindow. – paa

+0

Я пропустил это ... :) да .. это тот .. на самом деле 'TabContextMenu.contextTab._tPos' тот, который я хотел .. спасибо – erosman

0

Как насчет щелчка, возьмите event.target, который является элементом tab, а затем проведите через родительский указатель этого элемента табуляции, у которого есть дочерние элементы из вкладок. затем найдите там свое 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') и выполняют другой цикл (для получения URL) из другого API (' gBrowser.getBrowserAtIndex (i) .currentURI') кажется отходами. Если я не получу 'currentURI' из фирменного API !? – erosman

+0

Смотрите эту тему здесь: http://forums.mozillazine.org/viewtopic.php?f=19&t=2792651&p=13310951 есть атрибут '.popupNode', чтобы вы не перепутались с подменю: позвольте мне знаю, если это получится – Noitidart

+0

Спасибо ... но [document.popupNode] (https://developer.mozilla.org/en-US/docs/Web/API/document.popupNode) – erosman

Смежные вопросы