Группы закрываются нормально, но значок изменяется не правильно, с отставанием в 1 группу и алерт, выскакивающий при закрытии, тоже ошибается на 1. Что не так, не пойму.
Наверно закрытие групп происходит не сразу, а уже после того как твоей кнопке сработал alert и TogglePict();
if(event.button == 2) { // Закрыть текущую группу event.preventDefault(); event.stopPropagation(); var tab = TabView._window.GroupItems.getNextGroupItemTab(true).tab; var group = TabView._window.GroupItems._activeGroupItem; group.fadeAwayUndoButtonDelay = 0; group.closeAll(); gBrowser.selectedTab = tab; setTimeout(function() { TogglePict(); alertsService.showAlertNotification(tabpicton, "Группа вкладок удалена", "Всего групп: " + TabView._window.GroupItems.groupItems.length, false, "", null, ""); }, 500) }
Отредактировано bunda1 (07-10-2012 12:20:36)
Отсутствует
ох и заморочки с этими группами...
Но кнопка может получится полезная.
Тут у тебя что то лишние:
// выходим, если функция уже выполнялась if (window.gruppiRun == 'stop') return; window.gruppiRun = 'stop'; if (window.tabscrollRun == 'stop') return; window.tabscrollRun = 'stop';
Отредактировано bunda1 (07-10-2012 12:42:25)
Отсутствует
Да блокировать нужно, но хватит одной блокировки, например можно оставить:
Но я уже убедился на своем опыте что такая блокировка не универсальна.
Так вот лучше:
// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей .............. if (this.hasAttribute("stop")) return; // запуск функций и обработчиков .... alert(arguments.callee); // устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды this.setAttribute("stop","true");
Добавлено 07-10-2012 13:01:16
Но тоже есть проблемы
Добавлено 07-10-2012 13:05:51
Наверно Dumby и Infocatcher сделали бы удаление обработчиков. Tак конечно лучше, но мой метод проще.
Отредактировано bunda1 (07-10-2012 13:06:22)
Отсутствует
bunda1
Но если оставить, как есть (или с одной блокировкой), так тоже ж пройдет?
Или весь весь мой блок запуска/блокировки обработчиков нужно заменить на эти строки ?
// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей .............. if (this.hasAttribute("stop")) return; // устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды this.setAttribute("stop","true");
или нужны все строки, что ты привел?
А что это такое? Куда его впихнуть?
И еще: это ж у меня не отдельная кнопка, а код для инициализации и он вписан у меня в кнопку наряду с другими различными кодами. Получается этих строчек хватит для всех кодов сразу?
Отсутствует
Но если оставить, как есть (или с одной блокировкой), так тоже ж пройдет?
Да если оставить как есть или с одной блокировкой тоже будет работать.
И еще: это ж у меня не отдельная кнопка, а код для инициализации и он вписан у меня в кнопку наряду с другими различными кодами. Получается этих строчек хватит для всех кодов сразу?
Да хватит для всех кодов сразу, я сам так делаю. Вот пример Toggle Find+3, там 20 обработчиков блокируется.
Это просто пример, что бы проверить мой метод. Вместо этого кода пишем свой код.
Отредактировано bunda1 (07-10-2012 13:36:32)
Отсутствует
bunda1
Я серьёзно задумался над необходимостью блокировки обработчиков
от повторной инициализации кнопки. Именно тех, которые «addEventListener».
Никак не могу разобраться.
Нужен практический пример негативного влияния неблокированного EventListener'а
или, хотя бы, теоретическое обоснование, выручай...
Отсутствует
Я серьёзно задумался над необходимостью блокировки обработчиков
от повторной инициализации кнопки. Именно тех, которые «addEventListener».
Никак не могу разобраться.
Ну принципе уже okkamas_knife ответил. Обработчики дублируются от повторной инициализации кнопки и некоторые функции глючат, теоретическое обоснование не знаю.
Добавлено 08-10-2012 18:33:48
Кстати перенос вкладки в новое окно тоже может приводить к проблемам с CB кодом, вчера с этим столкнулся.
Отредактировано bunda1 (08-10-2012 18:33:48)
Отсутствует
bunda1
Использую твой Anti Boss - хорошая вещь!
Но вот возник вопрос по коду со схожим функционалом:
как отслеживать не ЛКМ+ПКМ (как в антибоссе), а например ЛКМ + скролл вверх/вниз?
Я бы масштабирование смог повесить, переход по странице или другие функции...
Отсутствует
bunda1
как отслеживать не ЛКМ+ПКМ (как в антибоссе), а например ЛКМ + скролл вверх/вниз?
Я бы масштабирование смог повесить, переход по странице или другие функции...
// ............................................................................... // добавляем обработчики для обработки мышиных событий на странице .... gBrowser.addEventListener("mousedown", function(event) { managePage.buttonDown(event) }, false); // нажатие на кнопку мыши gBrowser.addEventListener("mouseup", function(event) { managePage.buttonUp(event) }, false); // нажатая кнопка мыши отпущена gBrowser.addEventListener('DOMMouseScroll', function(event) { managePage.pageScroll(event) }, false); // для обработки скролла на странице var managePage = { buttonDown : function(event) { if ( event.button == 0 ) this.leftButtonDown = true; }, buttonUp : function(event) { if ( event.button == 0 ) this.leftButtonDown = false; }, pageScroll : function(event) { if ( !this.leftButtonDown ) return; event.preventDefault(); event.stopPropagation(); custombuttons.alertSlide("Cкролл на странице", (event.detail < 0)? "Страницу на самый верх": "Страницу в самый низ"); (event.detail < 0)? goDoCommand('cmd_scrollTop'): goDoCommand('cmd_scrollBottom'); } };
Есть кнопка где это и многое другое уже есть CB Mouse Gestures+
Отсутствует
bunda1
Спасибо, работает!!!
Есть кнопка где это и многое другое уже есть CB Mouse Gestures+
это новая версия кнопки из поста №11 ?
надо бы в отдельную темку запостить эту кнопку, а то потом фиг найдешь...
Отсутствует
Kamui
Теперь рисует жести на странице.
Жесты разделены по категориям, так намного удобней.
Перевод текста в окошке работает быстрее и его теперъ можно закрыть кликом по странице.
Отсутствует
bunda1
Мистика однако
Ага, понял, оказывается вышла кнопочка с +, теперь рисует, а в каком параметре цвет рисовки меняется, а то букав много, сутки искать буду.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Ага, понял, оказывается вышла кнопочка с +, теперь рисует, а в каком параметре цвет рисовки меняется, а то букав много, сутки искать буду.
Смотри где green
if (direction == "R") { for (var i = this.lastX, j = this.lastY; i <= event.screenX; i += 2) docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + i - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + (subY < 0 ? (j -= 2 * Math.abs(subY / subX)) : (j += 2 * Math.abs(subY / subX))) - content.mozInnerScreenY) + "px;"; } if (direction == "L") { for (var i = this.lastX, j = this.lastY; i >= event.screenX; i -= 2) docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + i - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + (subY < 0 ? (j -= 2 * Math.abs(subY / subX)) : (j += 2 * Math.abs(subY / subX))) - content.mozInnerScreenY) + "px;"; } if (direction == "U") { for (var i = this.lastY, j = this.lastX; i >= event.screenY; i -= 2) docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + (subX < 0 ? (j -= 2 * Math.abs(subX / subY)) : (j += 2 * Math.abs(subX / subY))) - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + i - content.mozInnerScreenY) + "px;"; } if (direction == "D") { for (var i = this.lastY, j = this.lastX; i <= event.screenY; i += 2) docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + (subX < 0 ? (j -= 2 * Math.abs(subX / subY)) : (j += 2 * Math.abs(subX / subY))) - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + i - content.mozInnerScreenY) + "px;"; }
Отсутствует
вытащенный из console.js код не срабатывет
Разумеется. Ему же нужно окно консоли ошибок.
https://developer.mozilla.org/en-US/doc … eset%28%29
Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService) .reset();
И можно повыключать
javascript.options.showInConsole (только не забыть включить, когда потребуется понять, что происходит с каким-нибудь расширением или кнопкой)
layout.css.report_errors
javascript.options.strict (по умолчанию отключено)
dom.report_all_js_exceptions (по умолчанию отключено)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
но при открытой консоли никаких изменений не происходило в её окне потому и думал что не работает
Ага, недоработка консоли.
Если там вообще есть оповещение об очистке, тогда недоработка API. Тут, во всяком случае, только оповещение о новых записях.
gContextMenu.onLink
Это chrome://browser/content/nsContextMenu.js или chrome://communicator/content/nsContextMenu.js в SeaMonkey.
Как минимум, вот эти есть:
// Initialize contextual info. this.onImage = false; this.onLoadedImage = false; this.onCompletedImage = false; this.onCanvas = false; this.onVideo = false; this.onAudio = false; this.onTextInput = false; this.onKeywordField = false; this.mediaURL = ""; this.onLink = false; this.onMailtoLink = false; this.onSaveableLink = false; this.link = null; this.linkURL = ""; this.linkURI = null; this.linkProtocol = ""; this.onMathML = false; this.inFrame = false; this.inSyntheticDoc = false; this.hasBGImage = false; this.bgImageURL = ""; this.onEditableArea = false; this.isDesignMode = false;
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
nsIConsoleService#reset
Консоль прекрасно и тут же очищается записью в неё null.
Отсутствует
Для экспериментов и проверки работы деструкторов: Custom Buttons: Disable Initialization
Добавляет в контекстное меню галочку «Включить инициализацию» и подсвечивает отключенные кнопки рамкой из точек.
Не рекомендуется для постоянного использования: для отключения в начало кода инициализации просто добавляется «return;», так что ненужные кнопки лучше убирать с панелей инструментов (или вообще удалять). Более того, стиль для подсветки не очень быстрый.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Как сделать сохранение изображение в папку загрузки без запроса, если адрес изображения известен.
Коди которые ниже это делают но мне нужно сохранение не из контекстного меню изображения а из кнопки и никак не удаются переделать эти коди.
gBrowser.mPanelContainer.addEventListener("dblclick", function(event) { if (event.button !== 2) return; //... if (event.target.nodeName == 'IMG'){ //if (gContextMenu.onLink && gContextMenu.onImage){ var doc = gContextMenu.target.ownerDocument; var d = "nodePrincipal" in doc?doc.nodePrincipal:doc.location.href; urlSecurityCheck(gContextMenu.imageURL, d); saveImageURL(gContextMenu.imageURL, null, "SaveImageTitle", false, true, makeURI(doc.location.href)); //.... setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 50) }; }, false);
(function() { var saveImageMenu = document.getElementById("context-saveimage"); if (!saveImageMenu) return; saveImageMenu.addEventListener("click", function(event) { if (event.button != 1) return; var doc = gContextMenu.target.ownerDocument; if ('nodePrincipal' in doc) urlSecurityCheck(gContextMenu.imageURL, doc.nodePrincipal); //Fx3 else urlSecurityCheck(gContextMenu.imageURL, doc.location.href); //Fx2 saveImageURL(gContextMenu.imageURL, null, "SaveImageTitle", false, true, makeURI(doc.location.href)); event.originalTarget.parentNode.hidePopup(); }, false); })();
Отсутствует