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.
Отсутствует