bunda1
никакой реакции на закрытие
закрываю СКМ по вкладке
И в твоем коде с алертом реакция на закрытие вкладки, только когда открыта всего одна группа. Если больше - алерта уже нет.
Отредактировано Inko7 (21-10-2012 17:29:36)
Отсутствует
gBrowser.tabContainer
У меня сложилось впечатление, что он содержит вообще все влкадки
из всех групп, поэтому будет работать далеко не всегда, или нет ?
Может это Tab Mix так делает...
Похоже что нет, без него такие же симптомы.
Отсутствует
bunda1 пишетgBrowser.tabContainer
У меня сложилось впечатление, что он содержит вообще все влкадки
из всех групп, поэтому будет работать далеко не всегда, или нет ?
Да в этом проблема. Как теперь узнать для Inko7 что закрывается последняя вкладка в группе.
Отсутствует
rsuan пишета с зажатой клавишей - последней справа.
Это не ответ, это - вопрос:
ИнициализацияВыделить кодКод:
this.onclick = function(e) { if (e.button != 0) return; var keys = e.ctrlKey || e.shiftKey || e.altKey; BrowserOpenTab(); if (keys) gBrowser.moveTabToEnd(); }
Уже хорошо, благодарю! Только бы ещё, если вкладка создаётся последней, то чтоб была наивысшего уровня (у меня Tree Style Tab), а не такого же, что и была текущая.
Отредактировано rsuan (21-10-2012 19:14:34)
Отсутствует
Да в этом проблема. Как теперь узнать для Inko7 что закрывается последняя вкладка в группе.
может можно просто посчитать сколько вкладок и если одна, то закрывать её предварительно открыв about:blank ?
Отсутствует
Как теперь узнать для Inko7 что закрывается последняя вкладка в группе.
Ничего не выходит, не могу понять причину глюка
Вот код, где, когда закрывается вкладка, пытаюсь узнать количество вкладок в активной группе.
После restarta - показывает одно, а после редактирования кнопки - другое ( разница в единицу )
Может быть ты сумеешь разобраться...
TabView._window || TabView._initFrame(); var tabs = gBrowser.tabContainer; function unnamed() { var group = TabView._window.GroupItems._activeGroupItem; custombuttons.alertSlide("alert", "tabs: " + group._children.length); } tabs.addEventListener("TabClose", unnamed, false); this.onDestroy = function() { tabs.removeEventListener("TabClose", unnamed, false); }
Отсутствует
Отсутствует
bunda1
Хотел узнать, надежда есть или никак.
CB easy drag and go
...вызвать меню всех установленных поисковиков - муторно, но может попробую.
но могу сделать так что бы кнопка "Stf" сохраняла файл в нужную папку без запроса и окна сохранения.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Inko7
TabView._window || TabView._initFrame(); var tabs = gBrowser.tabContainer; function tabCloseHandler(event) { var item = TabView._window.GroupItems._activeGroupItem._children.length; if ( item !== 1) return; gBrowser.removeAllTabsBut(gBrowser.addTab("about:blank")); setTimeout("gURLBar.focus()", 0); } tabs.addEventListener("TabClose", tabCloseHandler, false); this.onDestroy = function() { tabs.removeEventListener("TabClose", tabCloseHandler, false); }
Добавлено 21-10-2012 20:19:31
И может кому надо:
// ЛКМ + ПКМ на текущий таб, переместить таб в новую группу ............................................................. TabView._window || TabView._initFrame(); this.onDestroy = function() { gBrowser.mTabContainer.removeEventListener("mousedown", function(event) { openNewWin.buttonDown(event) }, false); gBrowser.mTabContainer.removeEventListener("mouseup", function(event) { openNewWin.buttonUp(event) }, false); }; gBrowser.mTabContainer.addEventListener("mousedown", function(event) { openNewWin.buttonDown(event) }, false); gBrowser.mTabContainer.addEventListener("mouseup", function(event) { openNewWin.buttonUp(event) }, false); var openNewWin = { buttonDown : function(event) { if ( event.button == 0 ) this.leftButtonDown = true; if ( event.button == 2 && this.leftButtonDown) { this.leftButtonDown = false; document.getElementById("tabContextMenu").hidden = true; setTimeout(function() { document.getElementById("tabContextMenu").hidden = false }, 500) // переместить текущий таб в новую группу .... var currTab = gBrowser.mCurrentTab; var item = TabView._window.GroupItems._activeGroupItem._children.length; if ( item == 1) return; // стоп если только одна вкладка TabView.moveTabTo(currTab, null); window.gBrowser.selectedTab = currTab; } }, buttonUp : function(event) { this.leftButtonDown = false } };
Отредактировано bunda1 (21-10-2012 20:29:36)
Отсутствует
bunda1
Спасибище! Код вроде бы рабочий, но возникает какой-то глюк с моей существующей кнопочкой. Новый код прописал в самом низу без первой строки TabView._window || TabView._initFrame(); , т.к. уже присутствует.
Глюк в следующем:
например есть две группы. Во второй закрываем последнюю вкладку (срабатывает так, как надо!) и затем закрываю всю эту группу нажатием ПКМ по кнопке групп. Переключается на первую группу, но вкладка в ней сама сразу закрывается, открывая about:blank
Проверь пожалуйста и можно ли это устранить?
Добавлено:
дело наверное не только в конфликте кнопок, а и все же в неправильном подсчете количества: вылазит разница в 1
Отредактировано Inko7 (21-10-2012 20:46:27)
Отсутствует
Считать будет все вкладки сразу в всех групах, это проблема.
Есть gBrowser.visibleTabs
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
alert(gBrowser.visibleTabs.length);
Так отображается правильное количество!
Но при попытке в коде заменить
var item = TabView._window.GroupItems._activeGroupItem._children.length;
на
var item = gBrowser.visibleTabs.length;
почему-то начинаются дикие тормоза, закрытие не срабатывают и т.д.
Но, как я понимаю, это все равно не избавит меня от конфликта кодов?
Dumby
Может у тебя есть мысли?
Отсутствует
Может у тебя есть мысли?
Только самые бредовые
Полагаю, что дело не в том, ты что-то заменил,
а в самом факте того, что кнопка была отредактирована.
Что бы я ни пробовал писать - редактирование кнопки
существенно влияет на результат работы, рестарт это подтверждает.
(даже если просто «Редактировать» и сразу «ОК»)
Не понимаю почему...
Отредактировано Dumby (22-10-2012 00:22:11)
Отсутствует
(даже если просто «Редактировать» и сразу «ОК»)
Не понимаю почему...
Нету onDestroy для уборки?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
В том то и дело, что есть ( но может быть неправильный ? )
Попробуй хотя бы этот код.
Если после рестарта - одно, а после редактирования - другое.
Но может я что-то не так делаю...
Отсутствует
Dumby
Да, неправильный.
addEventListener() делается для одной функции, а removeEventListener() – уже для другой.
Так что или
function f() {} someNode.addEventListener("someEvent", f, false); this.onDestroy = function() { someNode.removeEventListener("someEvent", f, false); };
, или
addEventListener("someEvent", f, false, someNode); // Custom Buttons переопределяет функцию addEventListener
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А счастье было так близко
Что может вызывать такое? Можно как-то их подружить?
// ДОПОЛНИТЕЛЬНЫЕ КЛИКИ ПО КНОПКЕ ГРУППИРОВКИ ВКЛАДОК function afterInit() { // удаление обработчика при повторной инициализации this.onDestroy3 = function() { // выходим, если функция уже выполнялась if (window.gruppiRun == 'stop') return; window.gruppiRun = 'stop'; if (window.tabscrollRun == 'stop') return; window.tabscrollRun = 'stop'; // добавляем обработчики document.getElementById("tabview-button").addEventListener("click", gruppi, false); document.getElementById("tabview-button").addEventListener("DOMMouseScroll", tabscroll, false); }(); var pancount; var tabpict1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsPAAALDwGS+QOlAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAADXSURBVDhPY/z//z8DMrj74gMylwlFEpXzD4kLU4cQAxmMjO88f88AxMZA7EsExqYOJMaAYijIAqjBvtc47P4TwiCL754R+o+MoY7BajATSJKQoSB5PAYzYXPxqMGQ1EHLyAMnt2fvvuS+/PC1ChcGyYMiD1kdVAwzuYESPMzFvCnb/qNjkEE5Uzn+48MYyQ1o5nQqGgxJbkAQAcRgBpVcjEjH9DCYERROFIYxVhfTzGBQOFPqYpylmz56OoamUQxx5HQOU4Ov2ISlDlCBBMMwMRCNLI5VDQCiLbDOKwZG7AAAAABJRU5ErkJggg=="; var tabpict2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsPAAALDwGS+QOlAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAADzSURBVDhPY/z//z8DMrj74gMylwlFEpXzD4kLU4cQAxmMjO88f88AxMZA7EsExqYOJMaAYijIAqjBvtc47P4TwiCL754R+o+MoY7BajATSJKQoSB5PAYzYXPxqMGQ1EHLyAMnt2fvvuS+/PC1ChcGyYMiD1kdVAx/cuNN2fYfHYMMypnK8R8fhic3YO7RB+JNUKwPCwoKDQbnRJChYlAMSpugoPCl2GCksgJkeDHQUEaqGQw1PALkfKoZDA3jYpjLqWkwKIxBZScYUymMUQshaFCAgkMfPR1D0yiGOHI6h6nBV2zCciCoQIJhmBiIRhbHqgYAR2yey86k8SwAAAAASUVORK5CYII="; var tabpict3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsOAAALDgFAvuFBAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAD1SURBVDhP7ZQ9DsIwDIXbTl0QEgPXyMDODXILRrgA9+AiDJyCmYmu/CzQAVaMHzjglJAiETYqPVWxrS9OYjsnokx/1a7Wy8Jz+ouLWrq4pw1grfX2mLEGLPuBQnGwZR4UGwjYrsohtQkbV8seaUkyQXABZxsU/gi4CGX8B9+r45ePdyu3zeE02dfn6TvBj8fTcWKLl1tntKCmABrPSorpUW7cPZaF9oPQFMjYfgn2OrbP4HkysMwKozLOk2Ts5gSDu4AzNA0Yx8eUksxxFcnAuAbAIZPojv0hhMwFbJp1LDX6Ytd17mJiY9NtgIHk5Gz4a3sw5gouQp8JxXOEQwAAAABJRU5ErkJggg=="; var tabpict4 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsOAAALDgFAvuFBAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAADsSURBVDhPY/z//z8DMrj74gMylwlFEpXzD4kLU4cQAxmMjO88f88AxMZA7EsExqYOJMaAYijIAqjBvtc47P4TwiCL754R+o+MoY7BajATSJKQoSB5PAYzYXPxqMGQ1EHLyAMnt2fvvuS+/PC1ChcGyYMiD1kdVAx/cuNN2fYfHYMMypnK8R8fhic3aO7hB9KgLMgICwoKDYbn2HKowfAwpthgaFmxG8lgkKt9KTYYaGAEEE+nhcEwQ0FhDMqmVHMxrPQDl59UijzUQgjJYH30dAxNoxjiyOkcpgZfsQlzOahAgmGYGIhGFseqBgB4vpfDfbAPggAAAABJRU5ErkJggg=="; var tabpict5 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAASCAYAAABfJS4tAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsOAAALDgFAvuFBAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAD1SURBVDhPY/z//z8DMrj74gMylwlFEpXzD4kLU4cQAxmMjO88f88AxMZA7EsExqYOJMaAYijIAqjBvtc47P4TwiCL754R+o+MoY7BajATSJKQoSB5PAYzYXPxqMGQ1EGzyIMabvzs3Zfclx++VuHCIHlQ5CGrg4rhT268Kdv+o2OQQTlTOf7jw/DkBsw9YkAMyn5gDAsKCg0G50RfILYEYhCHkZoGTwcaCMKbgFifagZDCyFGkGtBhgMNBrnalxpBAXIpTQw2gAYDyAJDKrkYpYBlA/GgYayPno6haRRDHDmdw9TgKzZhFoAKJBiGiYFoZHGsagAo0o3nCte9EwAAAABJRU5ErkJggg=="; var tabpicton = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsSAAALEgHS3X78AAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAClSURBVDhPY7zz/D0DEmBC5qCx/2FRhxADGQTExkDsSwTGpg4kxgAyBIR9r3HY/SeEQerunhH6j4yhloMNYqKCQUzD3CCqBTY4+p+9+5L78sPXKlwYJA+KFGR1UDHU6OdN2fYfHYM05kzl+I8PY0Q/hQYhon/UIIyAhwY2OIzA6YjCMILnfn30dARNIxjiyOkMpga5GIG5DFQSwDBMDJaxkeUw1AAAa9oGjiXnhDQAAAAASUVORK5CYII="; var tabpictoff = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAAGnRFWHRTb2Z0d2FyZQBQYWludC5ORVQgdjMuNS4xMDD0cqEAAAEGSURBVDhPhZSxEcIwDEVNqjQ0LEKRng2yBSUswB6swhTUVNDC0QAFtJj8YDk/inTm7t8ZS3qWLDmz8+0Z6FfxH7X+Gn7DHkAxhAh167aghu0UFwKDYDjVK1eAXI6LCAkkJdCDKjiwwYMJSEFQRZVBCC7B9IHILJU6BpVgfJCU6II8mAXRGaG8Vt8LB3oQAv271qm5Pt7b++uzY2kYDmQ/rBHbz2ICtfP1IWpp0GZfR610R0P7SxCBOqChawziTCTQ2oNt0jUB6WHjDCyYCWJHgOGkS9GwCUhDPBDA3hPJrx8OfFdWRtad5fbLCTxDaUaW1nyJ3+QzkmZJHjC+BpDMmN4X+8jnB6524gKM/bngAAAAAElFTkSuQmCC"; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); function tabscroll(event){ if (pancount == 1) return; var tgw = document. getElementById ("tab-view"). contentWindow; var groupItems = tgw. GroupItems; if (event.detail > 0) { var tabItem = groupItems. getNextGroupItemTab (false); custombuttons.alertSlide("Предыдущая группа", "Группы вкладок Firefox"); } else { var tabItem = groupItems. getNextGroupItemTab (true); custombuttons.alertSlide("Следующая группа ", "Группы вкладок Firefox"); } gBrowser. selectedTab = tabItem. tab; }; function gruppi(event){ if(event.button == 1) { // Открыть новую группу TabView._window.GroupItems.newGroup().newTab("about:blank"); TogglePict(); alertsService.showAlertNotification(tabpicton, "Группа вкладок создана", "Всего групп: " + TabView._window.GroupItems.groupItems.length, false, "", null, ""); } if(event.button == 2) { // Закрыть текущую группу event.preventDefault(); event.stopPropagation(); if (pancount == 1) return; var tab = TabView._window.GroupItems.getNextGroupItemTab(true).tab; var group = TabView._window.GroupItems._activeGroupItem; group.fadeAwayUndoButtonDelay = 0; StopTabCloseHandler = true; group.closeAll(); gBrowser.selectedTab = tab; setTimeout(function() { TogglePict(); alertsService.showAlertNotification(tabpictoff, "Группа вкладок удалена", "Всего групп: " + TabView._window.GroupItems.groupItems.length, false, "", null, ""); }, 500) } }; var PanButton = document.getElementById("tabview-button"); PanButton.onmouseover = function() { PanButton.setAttribute("tooltiptext", "Группы вкладок Firefox\nВсего групп: " + TabView._window.GroupItems.groupItems.length); }; function TogglePict(event) { pancount = TabView._window.GroupItems.groupItems.length; if (pancount == 1) PanButton.image = tabpict1; if (pancount == 2) PanButton.image = tabpict2; if (pancount == 3) PanButton.image = tabpict3; if (pancount == 4) PanButton.image = tabpict4; if (pancount == 5) PanButton.image = tabpict5; return pancount; }; TogglePict(); // циклическая проверка количества групп (1 сек) var count = 0; intervalID = setInterval(test, 1000); function test(){ count = count + 1; if (count == 2000){clearInterval(intervalID);}else{TogglePict();} }; }; TabView._window ? afterInit() : TabView._initFrame(afterInit); var tabs = gBrowser.tabContainer; function tabCloseHandler(event) { if ( event.target.linkedBrowser.currentURI.spec == 'about:blank') return; if ( TabView._window.GroupItems._activeGroupItem._children.length == 1 && !StopTabCloseHandler) { gBrowser.removeAllTabsBut(gBrowser.addTab("about:blank")); setTimeout("gURLBar.focus()", 0); } StopTabCloseHandler = false; } tabs.addEventListener("TabClose", tabCloseHandler, false); this.onDestroy = function() { tabs.removeEventListener("TabClose", tabCloseHandler, false); }
Отсутствует
Ты наверно говоришь про второй код ?
А я - про первый.
Прошу прощения, что не уточнил, виноват.
Да, про второй. Что-то я сразу не заметил, что в первом тоже onDestroy есть.
С первым кодом, на первый взгляд, все в порядке.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует