oleg.sgh
Там какая-то хитровымудренная хрень с jQuery, которая на click() по их кнопкам undefined возвращает. Я с этим не знаю что делать.
Тогда хотя бы так: нажатие на кнопку добавляет 7 после www. в адресной строке и нажимает ентер.
Если и это сложно то тогда: нажатие кнопки вставляет 7 в указанное курсором место и нажимает ентер.
Отсутствует
oleg.sgh
В секцию "код":
var loc = window.gBrowser.selectedBrowser.contentWindow.location; if (loc.host !== "www.kinopoisk.ru") return; loc.href = loc.href.replace('www.kinopoisk.ru', 'kinop.me');
Отсутствует
вполне себе алертит div без никакого CSS.escape()
Кажется, там только с кавычками и переводами строк могут быть проблемы.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
rbfyec пишетНо если в значении атрибута скажем есть буква "ä", она копируется в буфер как "%25C3%25A4".
Эээ... не должно такого происходить, где-нибудь вызывается какой-нибудь encodeURIComponent(). Причем дважды:
Да, точно! Именно так и получилось, дважды вызывался encodeURIComponent.
Теперь, зная причину, я стал искать где, нашёл и поправил это дело.
Спасибо за помощь!
Отсутствует
Здравствуйте.
Столкнулся с проблемой при работе с vertical_toolbar: не удается добавить CustomButtons-кнопки на вертикальную панель. В режиме настроек панель показывается, но перетянуть на нее кнопки не удается.
Проблема появляется при совместном использовании Firefox 46.0.1 (а также 46) и Classic Theme Restorer (CTR) 1.5.2 (а также 1.5.1, 1.4.6). Если отключть CTR, перетянуть кнопки на панель можно. Для старых версий Firefox (<= 38.*) и CTR (< 1.4.6) проблема отсутствует.
Код для vertical_toolbar брал отсюда: https://forum.mozilla-russia.org/viewtopic.php?pid=693420#p693420.
Не хочется отказываться ни новой версии Firefox, ни от CTR, ни от vertical_toolbar. Подскажите, пожалуйста, можно ли как-то «подружить» их?
Отредактировано LAT (23-05-2016 15:31:27)
Отсутствует
Проблема появляется при совместном использовании Firefox 46.0.1 (а также 46) и Classic Theme Restorer (CTR) 1.5.2 (а также 1.5.1, 1.4.6).
Я проверил Firefox 47 + Classic Theme Restorer с настройками по умолчанию + vertical_toolbar и вроде CB кнопки перетягиваются, думаю тут еще какие то настройки Classic Theme Restorer виноваты.
Отсутствует
Спасибо! 3 часа убивался, а такой простой тест в голову не пришел . Что было. При определенных настройках CTR:
1) в режиме настроек вертикальная панель выделяется (как панель) только частично, перетягивать надо не на саму панель, а в область, рядом с ней
2) область экрана, занятая верхней частью панели, пересекается с областью, занятой левой частью первой вкладки, поэтому даже после перетягивания иконка кнопки не отображается (над ней прорисовывается вкладка). Это вылечилось добавлением margin-top в стиль (в функции initVT).
Отредактировано LAT (24-05-2016 20:05:49)
Отсутствует
Уважаемые Гуру скриптописания, у меня к вам вопрос, возможно ли адаптировать этот код для CB кнопки? (с дальнейшей возможностью "повесить" эти действия на жесты мыши)
var closy = new function() { // public var initialized = false; this.init = function() { var tabMenu = getTabMenu();; if (tabMenu) { tabMenu.addEventListener("popupshowing", function(e) { closy.makemenu() }, false); } } this.makemenu = function() { if (!this.initialized) { var tabMenu = getTabMenu();; if (tabMenu) { this.initialized = true; var insertPos = tabMenu.lastChild.previousSibling; var ele = document.createElement("menuitem"); ele = document.createElement("menuitem"); ele.setAttribute("label", "Закрыть Дубликаты вкладок"); ele.setAttribute("tooltiptext", "Закрывает дубликаты вкладок с одинаковыми URL и оставляет только по одной из них"); ele.setAttribute("id", "closy-dupe"); ele.setAttribute("oncommand", "closy.closeDuplicateTabs();"); tabMenu.insertBefore(ele, insertPos); ele = document.createElement("menuitem"); ele.setAttribute("label", "Закрыть другие вкладки этого сайта"); ele.setAttribute("tooltiptext", "Закрывает все вкладки того же сайта, что и вкладка по которой Bы щелкнули"); ele.setAttribute("id", "closy-host"); ele.setAttribute("oncommand", "closy.closeHost();"); tabMenu.insertBefore(ele, insertPos); } else { traceLog("Unable to get tabContextMenu"); } } } // closes all other tabs from the host of the right clicked tab this.closeHost = function() { var tab = getTabClicked(); var host = false; // host for about:blank will fail try { host = tab.linkedBrowser.currentURI.host; } catch (e) {} if (host) { var tabs = getTabs(); for (var i = tabs.length - 1; i >= 0; i--) { var tabhost = false; // host for about:blank will fail try { tabhost = getBrowser().getBrowserAtIndex(i).currentURI.host; } catch (e) {} if (tabhost && tabhost == host) { // dont close the right clicked tab if (tab != tabs[i]) { // if we close the selected tab first select the previous tab if (i && getBrowser().selectedTab == tabs[i]) { getBrowser().mTabContainer.advanceSelectedTab(-1, true); } getBrowser().removeTab(tabs[i]); } } } } } // closes duplicate tabs this.closeDuplicateTabs = function(aThisOneOnly) { var urlclose = new Array(); var urlhash = new Object(); var thisuri = false; if (aThisOneOnly) { thisuri = getTabClicked().linkedBrowser.currentURI.spec; } var tabs = getTabs(); for (var i = tabs.length - 1; i >= 0; i--) { var uri = getBrowser().getBrowserAtIndex(i).currentURI.spec; if (thisuri) { if (thisuri == uri) { if (urlhash[uri]) { urlclose[urlclose.length] = i; } else { urlhash[uri] = true; } } } else { if (urlhash[uri]) { urlclose[urlclose.length] = i; } else { urlhash[uri] = true; } } } for (var i = 0, max = urlclose.length; i < max; i++) { getBrowser().removeTab(tabs[urlclose[i]]); } } // private function getTabMenu() { var ret = document.getAnonymousElementByAttribute(getBrowser(), "anonid", "tabContextMenu"); if (!ret) { ret = gBrowser.tabContextMenu; } if (!ret) { traceLog("Unable to get tabContextMenu with getBrowser"); } return ret; } function getTabClicked() { var tab = getBrowser().mContextTab; if (tab.localName != "tab") { tab = getBrowser().mCurrentTab; } if (!tab) { traceLog("Unable to get tab"); } return tab; } function getTabs() { var tabs = getBrowser().mTabContainer.childNodes; return tabs; } function traceLog(aText) { try { var CONSOLE_SERVICE = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService); CONSOLE_SERVICE.logStringMessage("closy: " + aText); } catch (err) {} } } window.addEventListener("load", function(e) { closy.init(e) }, false);
Отсутствует
brom113
Про жесты не знаю, не пользуюсь. А так, вот:
var tabMenu = gBrowser.tabContainer.contextMenu || document.getAnonymousElementByAttribute(gBrowser, "anonid", "tabContextMenu"); if (tabMenu) { var insertPos = tabMenu.lastChild.previousSibling; var ele = document.createElement("menuitem"); ele = document.createElement("menuitem"); ele.setAttribute("label", "Закрыть Дубликаты вкладок"); ele.setAttribute("tooltiptext", "Закрывает дубликаты вкладок с одинаковыми URL и оставляет только по одной из них"); ele.setAttribute("id", "closy-dupe"); ele.setAttribute("oncommand", "document.getElementById('" + self.id + "').closeDuplicateTabs();"); tabMenu.insertBefore(ele, insertPos); ele = document.createElement("menuitem"); ele.setAttribute("label", "Закрыть другие вкладки этого сайта"); ele.setAttribute("tooltiptext", "Закрывает все вкладки того же сайта, что и вкладка по которой Bы щелкнули"); ele.setAttribute("id", "closy-host"); ele.setAttribute("oncommand", "document.getElementById('" + self.id + "').closeHost();"); tabMenu.insertBefore(ele, insertPos); } // closes all other tabs from the host of the right clicked tab this.closeHost = function() { var tab = getTabClicked(); var host = false; // host for about:blank will fail try { host = tab.linkedBrowser.currentURI.host; } catch (e) {} if (host) { var tabs = getTabs(); for (var i = tabs.length - 1; i >= 0; i--) { var tabhost = false; // host for about:blank will fail try { tabhost = getBrowser().getBrowserAtIndex(i).currentURI.host; } catch (e) {} if (tabhost && tabhost == host) { // dont close the right clicked tab if (tab != tabs[i]) { // if we close the selected tab first select the previous tab if (i && getBrowser().selectedTab == tabs[i]) { getBrowser().mTabContainer.advanceSelectedTab(-1, true); } getBrowser().removeTab(tabs[i]); } } } } } // closes duplicate tabs this.closeDuplicateTabs = function(aThisOneOnly) { var urlclose = new Array(); var urlhash = new Object(); var thisuri = false; if (aThisOneOnly) { thisuri = getTabClicked().linkedBrowser.currentURI.spec; } var tabs = getTabs(); for (var i = tabs.length - 1; i >= 0; i--) { var uri = getBrowser().getBrowserAtIndex(i).currentURI.spec; if (thisuri) { if (thisuri == uri) { if (urlhash[uri]) { urlclose[urlclose.length] = i; } else { urlhash[uri] = true; } } } else { if (urlhash[uri]) { urlclose[urlclose.length] = i; } else { urlhash[uri] = true; } } } for (var i = 0, max = urlclose.length; i < max; i++) { getBrowser().removeTab(tabs[urlclose[i]]); } } // private function getTabMenu() { var ret = document.getAnonymousElementByAttribute(getBrowser(), "anonid", "tabContextMenu"); if (!ret) { ret = gBrowser.tabContextMenu; } return ret; } function getTabClicked() { var tab = getBrowser().mContextTab; if (tab.localName != "tab") { tab = getBrowser().mCurrentTab; } return tab; } function getTabs() { var tabs = getBrowser().mTabContainer.childNodes; return tabs; }
Отсутствует
Доброго времени суток !
Не подскажете код кнопочки для удаления разом кукисов нескольких сайтов. Чем проще - тем лучше, пускай даже site1.com и site2.com будут просто в коде прописаны.
Поиском результатов не дал.
Пользуюсь Cookies Permissions, но у него всё-же несколько другие задачи.
Спасибо заранее если подскажете чего или носом тыкнете.
На форуме
Coroner
Отсутствует
Помогите пожалуйста сделать определение количества выделенного текста.
Возможно ли сделать какоето уведомление когда выделил больше 2000?
В теме стилей подсказали код для СВ.
Отсутствует
Спасибо turbot, помог с кодом, только лагает немного при выделении и не всегда однозначно выделяет. Помогите пожалуйста доработать.
Суть в том что меняется цвет выделения текста если выделено больше 2000 символов.
turbot
Оно работает, но не советую использовать. Начинает лагать браузер. Подозреваю, что листенер не удаляется, как задумано. Да и без этого там страх и ужас, но как смог.
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = makeURI("data:text/css," + encodeURIComponent('::-moz-selection{background-color:orangered!important}')); addEventListener('mousedown', e=> { var win = e.target.ownerDocument.defaultView; if (win.top != content) return; for (var type of ['mousemove', 'mouseup']) { gBrowser.addEventListener(type, function func(ev) { if (ev.type == 'mousemove') { Services.previousUri = uri; var sel = win.getSelection().toString(); if (sel.length >= 2000) { try {sss.unregisterSheet(Services.previousUri || uri, 0)} catch(ex) {}; sss.loadAndRegisterSheet(uri, 0); } else try {sss.unregisterSheet(Services.previousUri || uri, 0)} catch(ex) {}; } else gBrowser.removeEventListener(type, func); }) } }, false, gBrowser);
Отредактировано Stakhovsky (01-06-2016 20:38:12)
Отсутствует
fokanik
В "код":
var targetTab = gBrowser.selectedTab; setTimeout(()=> gBrowser.removeTab(targetTab, { animate: true }), 10000);
10000 - время в миллисекундах, после которого закроется. Если нужна индикация таймера (например на кнопке), то можно сделать, но я не осилю.
Отсутствует
Хвала
Гуглу Утке, осилил:
var targetTab = gBrowser.selectedTab; var timer; var minutes = 1; var seconds = 30; var label = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-text"); function countdown() { label.style.display = "-moz-box"; if (parseInt(seconds) > 0) { seconds = parseInt(seconds) - 1; label.value = minutes + ":" + seconds; timer = setTimeout(()=>countdown(), 1000); } else { if (parseInt(seconds) == 0) { if (parseInt(minutes) > 0) { minutes = parseInt(minutes) - 1; seconds = 60; label.value = minutes + ":" + seconds; timer = setTimeout(()=>countdown(), 1000); } else { clearTimeout(timer); label.style.display = "none"; gBrowser.removeTab(targetTab, { animate: true }); } } } } countdown();
Время до закрытия задавать в minutes и seconds. Индикация выводится в лэйбле кнопки.
P.S.: Готовая, меняющимися при включении/отключении иконками:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAOxAAADsQH1g+1JAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAG9QTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA62mwiwAAACV0Uk5TAAEFCw0QJSYuMTU2OTw9QkhbaGxtdXh5fH1+gISHiImRkpOf33okWJ0AAAB1SURBVBgZBcGLAoEwAADAGzEKpcLmsRH//43uAE7fZ44AMAw2lylAOMMwoFsCpg76HvYT2zsApOixxmcHWCcVdr8R8FLAeHuvwEsB3tcDKCqwOgZQ5QYAmiwmAEiRuQWgnRGWFqBdAoQ5NdCkOQBirqXUHOEPHMkGCwcLYooAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20targetTab%20%3D%20gBrowser.selectedTab%3B%0Avar%20timer%3B%0Avar%20minutes%20%3D%201%3B%0Avar%20seconds%20%3D%2030%3B%0Avar%20label%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-text%22%29%3B%0Avar%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Afunction%20countdown%28%29%20%7B%0A%20%20label.style.display%20%3D%20%22-moz-box%22%3B%0A%20%20icon.src%20%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAA7EAAAOxAfWD7UkAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAA80lEQVQoU13RuUoDARAG4G89AqKQiAd2WnggWihCrLQICAEbTZtXiKVCMIoQ8UCbKIhWsRAM1oKP4SONRdYlG6aZf+abaoTBsqfr2oXVbDIEqqpByamGJAUS9TwIQdmzpA8ayhmoqGT9tkZgxWU6KP2vMtKyypXJNHadDIFJLe6zOO3Xi9kcueVuIO5rejOfB7e5ixNv1gfy3RAIRs04dmjqH7T7bQYO9Byp+7IZXLCkNbAe9xPUbCj4DhJB21oGdjSCmo6aB8UgKHiylYJFnSBRMqFnLPrPMuLcmbkQfFgOwa7HkIIQLGhaC4pevft0oxDCH6HKsyKMAMt1AAAAAElFTkSuQmCC%27%3B%0A%20%20if%20%28parseInt%28seconds%29%20%3E%200%29%20%7B%0A%20%20%20%20seconds%20%3D%20parseInt%28seconds%29%20-%201%3B%0A%20%20%20%20label.value%20%3D%20minutes%20+%20%22%3A%22%20+%20seconds%3B%0A%20%20%20%20timer%20%3D%20setTimeout%28%28%29%3D%3Ecountdown%28%29%2C%201000%29%3B%0A%20%20%7D%0A%20%20else%20%7B%0A%20%20%20%20if%20%28parseInt%28seconds%29%20%3D%3D%200%29%20%7B%0A%20%20%20%20%20%20if%20%28parseInt%28minutes%29%20%3E%200%29%20%7B%0A%20%20%20%20%20%20%20%20minutes%20%3D%20parseInt%28minutes%29%20-%201%3B%0A%20%20%20%20%20%20%20%20seconds%20%3D%2060%3B%0A%20%20%20%20%20%20%20%20label.value%20%3D%20minutes%20+%20%22%3A%22%20+%20seconds%3B%0A%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28%28%29%3D%3Ecountdown%28%29%2C%201000%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20clearTimeout%28timer%29%3B%0A%20%20%20%20%20%20%20%20label.style.display%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20gBrowser.removeTab%28targetTab%2C%20%7B%20animate%3A%20true%20%7D%29%3B%0A%20%20%20%20%20%20%7D%0A//%20%20%20%20%20%20%20if%20%28parseInt%28seconds%29%20%3D%3D%200%29%20%7B%0A//%20%20%20%20%20%20%20%20%20clearTimeout%28tim%29%3B%0A//%20%20%20%20%20%20%20%20%20label.style.display%20%3D%20%22none%22%3B%0A//%20%20%20%20%20%20%20%20%20gBrowser.removeTab%28targetTab%2C%20%7B%20animate%3A%20true%20%7D%29%3B%0A//%20%20%20%20%20%20%20%7D%0A//%20%20%20%20%20%20%20else%20%7B%0A//%20%20%20%20%20%20%20%20%20seconds%20%3D%2060%3B%0A//%20%20%20%20%20%20%20%20%20label.value%20%3D%20minutes%20+%20%22%3A%22%20+%20seconds%3B%0A//%20%20%20%20%20%20%20%20%20tim%20%3D%20setTimeout%28%28%29%3D%3Ecountdown%28%29%2C%201000%29%3B%0A//%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0Acountdown%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано turbot (04-06-2016 22:13:20)
Отсутствует
Здравствуйте. Возможно ли сделать кнопку с действием Page Down?
Page Navigation(Firefox) Работает в FF29 и выше - это замена кнопки UpDownCenterPage
Отредактировано fokanik (05-06-2016 00:52:51)
Отсутствует
kanazei
В "код":
var e = document.createEvent("KeyEvents"); e.initKeyEvent("keypress", true, true, null, false, false, false, false, e.DOM_VK_PAGE_DOWN, 0); document.activeElement.nodeName == "browser" ? gBrowser.contentDocument.activeElement.dispatchEvent(e) : document.activeElement.dispatchEvent(e);
Из какой-то кнопки bunda1, кажется. Коды клавиш здесь смотреть.
Отсутствует
kanazei пишетЗдравствуйте. Возможно ли сделать кнопку с действием Page Down?
Page Navigation(Firefox) Работает в FF29 и выше - это замена кнопки UpDownCenterPage
Спасибо большое, работает!
Отсутствует
Dook
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); @-moz-document url("chrome://custombuttons/content/editor.xul") { cbeditor { font: 600 16px/22px "Liberation Mono" !important; /* толщина размер/межстрочное растояние шрифт */ } }
Если используете CB_Source_Editor:
@namespace url("http://www.w3.org/1999/xhtml"); @-moz-document url-prefix("data:") { .CodeMirror { font: 600 16px/22px "Liberation Mono" !important; /* толщина размер/межстрочное растояние шрифт */ } }
В Stylish, либо в userContent.css.
Отсутствует