bunda1 сорри за тупость, просто мыша перепрограммирована и на CKM стоит клавиша F1... забыл перед запуском проверить
Значит ПКМ=2 ?
UPD Глянул свой скрипт обработки, да двойка... извиняюсь - ступил что то... может просто в Москве жарко
Отредактировано Indomito (27-06-2013 23:13:17)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
okkamas_knife да знаю я знаю... сам же обработчик писал, просто что то "тормознул"
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Тогда придётся вставлять перед следующим элементом, т.е.
так и не понял, "перед" это "меню перед" или что?
вставил в конец кода ничего хорошего не получилось. заменял nextEleMenu на nextEleMenu.nextSibling и на nextSibling - тоже ничего.
bunda1
если бы я понимал что там толкуют, то обращался бы сюда
Синтаксис
nodeObject.nextSibling
вставил, он не работает
Отсутствует
сразу в панель закладок попадать
На крайний случай
const [toolbar, fPopup, popup] = ["toolbar-menubar", "bookmarksMenuPopup", "bookmarksToolbarFolderPopup"] .map(function(id) document.getElementById(id)); if (popup.state == "closed") { const props = ["toolbar._setActive", "fPopup.style.maxWidth", "fPopup.style.maxHeight"]; const sets = ["Function()", 0, 0]; const baks = props.map(function(prop, i) i ? eval(prop).quote() : eval(prop)); props.forEach(function(prop, i) eval(prop + " = " + sets[i])); fPopup.openPopup(); popup.openPopupAtScreen(event.screenX, event.screenY); popup.addEventListener("popuphidden", function ph(e) { if (e.target != popup) return; popup.removeEventListener("popuphidden", ph, false); props.forEach(function(prop, i) eval(prop + " = " + baks[i])); }, false); }
убрать все тултипы кроме того что появляется под курсором при наведении на ссылку
Может так
(function() { function onPS(e) { if (e.originalTarget.nodeName != "tooltip" || window.__attributesInspector) return; var node = e.originalTarget.ownerDocument.tooltipNode; for (; node && !(node instanceof HTMLAnchorElement); node = node.parentNode); !node && e.preventDefault(); } const observer = { observe: function(win) win.addEventListener("load", this, false), handleEvent: function(e) { var doc = e.target; var win = doc.defaultView; win.removeEventListener("load", this, false); if (doc.location.href == "chrome://browser/content/browser.xul" || win.cbttp) return; win.cbttp = true; win.addEventListener("popupshowing", onPS, true); win.addEventListener("unload", function onUL() { win.removeEventListener("unload", onUL, false); win.removeEventListener("popupshowing", onPS, true); }, false) } } addEventListener("popupshowing", onPS, true); Services.obs.addObserver(observer, "domwindowopened", false); addDestructor(function() Services.obs.removeObserver(observer, "domwindowopened")); })();
Отсутствует
Kiril__777
После var nextEleMenu = document.getElementById("context-inspect");
Но лучше вместо "context-inspect" прописать нужный пункт. Посмотреть его можно кнопкой Attributes Inspector.
Отсутствует
Dumby
А не подскажешь как узнать над каким элементам находится курсор без специальных обработчиков типа mouseover. Мне нужно чтобы код который ниже не блокировал показ notification-popup если курсор находится над определенный кнопкой в адресной строке document.getElementById("plugins-notification-icon"). Не хочется ставить и поверять лишние атрибуты на этой кнопке:
addEventListener("popupshowing", function(e) { if ( e.target.id !== "notification-popup") return; e.preventDefault() }, true, window );
Отредактировано bunda1 (28-06-2013 20:19:20)
Отсутствует
как узнать над каким элементам находится курсор без специальных обработчиков
Можно проверить document.querySelector("#plugins-notification-icon:hover"), но такая проверка может быть не очень быстрой.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Можно проверить document.querySelector("#plugins-notification-icon:hover"), но такая проверка может быть не очень быстрой.
Спасибо, тогда вопрос снимается.
Отсутствует
bunda1
Ну, это в теории, мне просто проверять лень.
А так, если вызывать не очень часто, то все равно должно быть лучше, чем обработка перемещения мыши.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
bunda1
А так, если вызывать не очень часто, то все равно должно быть лучше, чем обработка перемещения мыши.
Нет не часто, ну тогда это годится, отлично
Отсутствует
Может кому надо:
// Обработчик следит за всплывающими подсказками и запускают нужные коды и функции ................................ addEventListener("popupshowing", function(e) { // блокировать лишние тултипы в адресной строке .... var node = document.tooltipNode if ( node && node.id && ["go-button", "identity-box", "page-proxy-favicon"].indexOf( node.id ) !== -1 ) { e.preventDefault(); } // блокировать произвольное открытие запроса 'Вы хотите включить плагины на этой странице?' .... else if ( !document.querySelector("#plugins-notification-icon:hover") && e.target.getAttribute('popupid') == 'click-to-play-plugins' ) e.preventDefault(); }, true );
Отредактировано bunda1 (30-06-2013 01:53:47)
Отсутствует
bunda1 ни разу такой запрос не встречал, а когда он возникает то? Ну по уму понятно, но просто я включал выключал но накого вопроса мне не задавали.
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
bunda1 ни разу такой запрос не встречал, а когда он возникает то? Ну по уму понятно, но просто я включал выключал но накого вопроса мне не задавали.
Отсутствует
Попробуй:
// Отображать потребление памяти в адресной строке ................................ var ucjs_MemoryMonitor = { _interval: 2000, // ms _prefix: "MB", //B, KB, MB, GB _dPrefix: true, interval: null, init: function() { var memoryPanel = document.createElement("statusbarpanel"); memoryPanel.id = "MemoryDisplay"; memoryPanel.setAttribute("label", this.setPrefix(this._dPrefix)); var urlbar = document.getElementById("urlbar-icons"); urlbar.insertBefore( memoryPanel, urlbar.lastChild ); addDestructor(function() { urlbar.removeChild( memoryPanel ) }); this.start(); this.interval = setInterval(this.start, this._interval); addFigure: function (str) { var num = new String(str).replace(/,/g, ""); while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; }, getSize: function( mem, flag ) { var pre = 1; switch (this._prefix) { case 'KB': pre = 1024; break; case 'MB': pre = 1024 * 1024; break; case 'GB': pre = 1024 * 1024 * 1024; break; } if ( flag ) return mem * pre; else return ucjs_MemoryMonitor.addFigure(Math.round(mem / pre)); }, setPrefix: function (flag) { return (flag) ? " " + this._prefix : ""; }, start: function () { try { const Cc = Components.classes; const Ci = Components.interfaces; var mgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager); var e = mgr.enumerateReporters(); var gMemReporters = {}; while ( e.hasMoreElements() ) { var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter); gMemReporters[mr.path] = mr; } var workingSet = gMemReporters["resident"].amount; var reset = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true); var memoryPanel = document.getElementById("MemoryDisplay"); memoryPanel.setAttribute("label", ucjs_MemoryMonitor.getSize(workingSet) + ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix)); memoryPanel.style.minWidth = "5.5em"; memoryPanel.style.textAlign = "right"; } catch (e) { clearInterval(ucjs_MemoryMonitor.interval) }; } } ucjs_MemoryMonitor.init();
Отредактировано bunda1 (29-06-2013 17:57:57)
Отсутствует
Не катит. Сразу пропадает из адресной строки "Memory Monitor". а после перезагрузки исчезает и "Изменить масштаб"
// Кнопка для управления масштабом страницы в адресной строке ................................ var zoomButton = { init: function() { // Создать настройку в 'about:config' если не существует ..... if ( !custombuttons.isPref("zoom.allEvenly") ) custombuttons.getPref("zoom.allEvenly", false); /* Следим за изменением масштаба, переключением режима отображения масштаба, переключением на другую вкладку и запускаем изменения отображения масштаба на кнопке или установку единого масштаба ....*/ var cmd = "gPrefService.setCharPref('zoom.Percent', ZoomManager.zoom.toFixed(2)); zoomButton.update(); $&"; eval("ZoomManager.toggleZoom = " + ZoomManager.toggleZoom.toString().replace(/}$/, cmd)); eval("FullZoom.reset = " + FullZoom.reset.toString().replace(/}$/, cmd)); eval("FullZoom.enlarge = " + FullZoom.enlarge.toString().replace(/}$/, cmd)); eval("FullZoom.reduce = " + FullZoom.reduce.toString().replace(/}$/, cmd)); eval("FullZoom._handleMouseScrolled = " + FullZoom._handleMouseScrolled.toString().replace(/}$/, cmd)); addEventListener("TabAttrModified", function(e) { if ( e.target.linkedBrowser.currentURI.spec == getBrowser().currentURI.spec ) { zoomButton.setAllZoom(); zoomButton.update(); } }, true, gBrowser.tabContainer ); // Создаём кнопку в адресной строке .... var zoomPanel = document.createElement("statusbarpanel"); zoomPanel.setAttribute("id", "zoomButton"); zoomPanel.setAttribute("context", "event.stopPropagation()"); var text = "Л: менять масштаб страницы / только текста\nС: единый масштаб для всех страниц / для сайта \nП: сбросить масштаб на 100% "; zoomPanel.setAttribute("tooltiptext", text); addDestructor(function() { urlbar.removeChild( zoomPanel ) }); var urlbar = document.getElementById("urlbar-icons"); // перемещаем кнопку в адресную строку urlbar.insertBefore( zoomPanel, urlbar.lastChild ); zoomButton.update(); // включаем показ масштаба на кнопке // Менять масштаб колесиком мыши на кнопке .... addEventListener("DOMMouseScroll", function(e) { ( e.detail > 0 )? FullZoom.reduce(): FullZoom.enlarge(); }, false, zoomPanel ); // Настройка функций кликов мыши на кнопке масштаба .... addEventListener("click", function(e) { // ЛКМ переключает режим изминения масштаба( страницы или только текста ) if ( e.button == 0 ) document.getElementById("cmd_fullZoomToggle").doCommand(); // СКМ переключает единый масштаб для всех страниц /для сайта if ( e.button == 1) { custombuttons.setPrefs("zoom.allEvenly", !custombuttons.getPrefs("zoom.allEvenly") ); custombuttons.setPrefs("zoom.Percent", ZoomManager.zoom.toFixed(2) ); zoomButton.update(); } // ПКМ сбросит масштаб на 100% if ( e.button == 2) FullZoom.reset(); }, false, zoomPanel ); }, // Устанавливать единый масштаб для всех страниц если это разрешено в 'about:config' .... setAllZoom: function() { if ( custombuttons.getPrefs("zoom.allEvenly") ) { var Z_value = custombuttons.getPrefs("zoom.Percent"); if ( ZoomManager.zoom.toFixed(2) == Z_value ) return; // исключения - страницы на которых функция не сработает .... if (/about:|fastdial|extensions.xul|bookmarksPanel.xul|console.xul/.test( content.location.href ) ) return; getBrowser().markupDocumentViewer.fullZoom = Z_value; getBrowser().markupDocumentViewer.textZoom = Z_value; } }, // Показывать текущий масштаб страницы на кнопке и изменять цвет и шрифт отображения масштаба .... update: function() { var Zoom = document.getElementById("zoomButton"); Zoom.setAttribute("label", Math.floor((ZoomManager.zoom + 0.005) * 100) + "%"); Zoom.style.MozAppearance = "none"; // стиль для кнопки Zoom.style.border = "0px"; Zoom.style.marginRight = "-20px"; Zoom.style.fontWeight = ZoomManager.useFullZoom ? '' : 'bold'; Zoom.style.color = custombuttons.getPrefs("zoom.allEvenly") ? "red" : ""; } }; zoomButton.init(); // Отображать потребление памяти в адресной строке ................................ var ucjs_MemoryMonitor = { _interval: 2000, // ms _prefix: "MB", //B, KB, MB, GB _dPrefix: true, interval: null, init: function() { var memoryPanel = document.createElement("statusbarpanel"); memoryPanel.id = "MemoryDisplay"; memoryPanel.setAttribute("label", this.setPrefix(this._dPrefix)); memoryPanel.setAttribute("tooltiptext", "Л: автоматически выгружать память"); var urlbar = document.getElementById("urlbar-icons"); urlbar.insertBefore( memoryPanel, urlbar.lastChild ); addDestructor(function() { urlbar.removeChild( memoryPanel ) }); this.start(); this.interval = setInterval(this.start, this._interval); }, addFigure: function (str) { var num = new String(str).replace(/,/g, ""); while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; }, getSize: function( mem, flag ) { var pre = 1; switch (this._prefix) { case 'KB': pre = 1024; break; case 'MB': pre = 1024 * 1024; break; case 'GB': pre = 1024 * 1024 * 1024; break; } if ( flag ) return mem * pre; else return ucjs_MemoryMonitor.addFigure(Math.round(mem / pre)); }, setPrefix: function (flag) { return (flag) ? " " + this._prefix : ""; }, start: function () { try { const Cc = Components.classes; const Ci = Components.interfaces; var mgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager); var e = mgr.enumerateReporters(); var gMemReporters = {}; while ( e.hasMoreElements() ) { var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter); gMemReporters[mr.path] = mr; } var workingSet = gMemReporters["resident"].amount; var reset = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true); var memoryPanel = document.getElementById("MemoryDisplay"); memoryPanel.setAttribute("label", ucjs_MemoryMonitor.getSize(workingSet) + ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix)); memoryPanel.style.minWidth = "5.5em"; memoryPanel.style.textAlign = "right"; } catch (e) { clearInterval(ucjs_MemoryMonitor.interval) }; } } ucjs_MemoryMonitor.init();
Отсутствует
проще переписать скрипт используя такой шаблон
Вот еще один шаблон, но он только для меню годится:
// https://gist.github.com/Infocatcher/5891622 var menu = [ { label: "Alert!", cb_id: "alert" }, { label: "Google", cb_id: "google", image: "https://www.google.com/favicon.ico" }, "menuseparator", [ "Menu label", { label: "Sub item 1", cb_id: "sub" }, { label: "Sub item 2", cb_id: "sub2" } ], [ "Menu label 2", "https://www.google.com/favicon.ico", { label: "Sub item 3", cb_id: "sub3" }, { label: "Sub item 4", cb_id: "sub4" } ] ]; function parseItem(arr, parent) { if(!parent) parent = document.createElement("menupopup"); arr.forEach(function(item) { var node; if(item == "menuseparator") node = document.createElement("menuseparator"); else if(Array.isArray(item)) { node = document.createElement("menu"); node.setAttribute("label", item[0]); var icon = item[1]; if(typeof icon == "string") { node.className = "menu-iconic"; node.setAttribute("image", icon); } var mp = document.createElement("menupopup"); parseItem(item, mp); node.appendChild(mp); } else if(typeof item == "object" && item) { node = document.createElement("menuitem"); if(item.hasOwnProperty("image") && !item.hasOwnProperty("class")) item.class = "menuitem-iconic"; for(var attr in item) if(item.hasOwnProperty(attr)) node.setAttribute(attr, item[attr]); } node && parent.appendChild(node); }); return parent; } var mp = parseItem(menu); mp.setAttribute("oncommand", "this.parentNode.handleCommand(event);"); mp.setAttribute("onclick", "if(event.button != 0) this.parentNode.handleCommand(event);"); mp.setAttribute("oncontextmenu", "return false;"); this.type = "menu"; this.orient = "horizontal"; this.appendChild(mp); this.handleCommand = function(e) { var trg = e.target; var cmd = trg.getAttribute("cb_id"); if(!cmd) return; var btn = e.type == "click" && e.button || 0; btn && closeMenus(trg); // See chrome://browser/content/utilityOverlay.js alert("Button: " + btn + "\nCommand: " + cmd); };
Отредактировано Infocatcher (29-06-2013 19:49:22)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Вот еще один шаблон, но он только для меню годится:
да шаблонов уже кучка, осталось остановиться на конкретном, который попроще, и писать... пИсать ибо кнопок много отвалилось.
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует