Большая просьба сделать кнопку на панель инструментов, которая будет открывать стандартный диалог "Сохранить как..." (Ctrl + S).
saveBrowser(gBrowser.selectedBrowser);
Тьфу, MAFF, паршивец ...
document.getElementById("Browser:SavePage").doCommand();
сделать кнопку на панель инструментов Firefox для вызова расширения MAFF https://addons.mozilla.org/ru/firefox/a … ve-format/, по которой вызывалось бы то же самое меню, которое расширение по умолчанию добавляет в меню Файл:
, звучит как
"MozillaArchiveFormat" in window && MozillaArchiveFormat.Prefs.saveEnabled && (this.popup || function() { var menuitems = ["Page", "Tabs", "AllTabs"].map( str => document.getElementById(`mafMenuSave${str}InArchive_fileMenu`) ).filter(n => n); if (!menuitems.length) return {openPopup() {alert("maf menuitems not found")}}; var popup = self.appendChild(document.createElement("menupopup")); for(var menuitem of menuitems) { var elm = popup.appendChild(document.createElement("menuitem")); var attrs = { label: menuitem.getAttribute("labelsaveas"), command: menuitem.command, accesskey: menuitem.accessKey } for(var attr in attrs) elm.setAttribute(attr, attrs[attr]); } return self.popup = popup; }()).openPopup(this, "after_start");
Отредактировано Dumby (30-12-2016 20:16:29)
Отсутствует
Кто-нибудь из тех, у кого Windows, и у кого есть Nightly, может подтвердить,
что там теперь event.preventDefault() больше не предотвращает появления контекстных меню?
Вроде потверждаю.
Отсутствует
event.preventDefault() больше не предотвращает появления контекстных меню?
Эх, убрали фишку, да:
function hasModifier(e) { return e.ctrlKey || e.altKey || e.shiftKey || e.metaKey; } this.onclick = function(e) { if(e.button == 2 && !hasModifier(e)) { e.preventDefault(); this.checked = !this.checked; } }; //this.oncontextmenu = function(e) { // if(!hasModifier(e)) // e.preventDefault(); //};
Добавлено 30-12-2016 21:41:08
А еще тут могут скоро поломать click, событие будет генерироваться только для левой кнопки мыши:
https://bugzilla.mozilla.org/show_bug.cgi?id=1304044#c1
Зато есть auxclick, ага.
Документации, как водится, еще нет: https://www.google.ru/search?q="auxclic … ozilla.org
Отредактировано Infocatcher (30-12-2016 21:41:08)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Dumby
, звучит как
Спасибо большое, кнопка работает, но не работает первый пункт "Сохранить страницу в архив как...". Оно бы и ничего, но требует лишних движений при сохранении
P.S.
Заработал пунктик. Что-то его таки дернуло, а я всего лишь сменил икону-звездочку на пользовательскую.
P.P.S.
Все же он не работает, точнее, работает через раз, иногда, но не всегда, помогает перезапуск FF.
Отредактировано shadow_user (31-12-2016 11:26:13)
Отсутствует
Где-нибудь можно задать время показа Alerts? В коде кнопок не нашел. Вроде в FF38 алерты закрывались быстрее.
Я заметил, что когда появляется Alert, то её убрать можно не только нажатием на ОК, но и на клавишу ENTER(RETURN).
Теперь вопрос: почему же тогда не убирается Alert таким кодом:
function press_return(){var evt = document.createEvent("KeyEvents"); evt.initKeyEvent("keypress",true,true,null,false,false,false,false,evt.DOM_VK_RETURN,0); document.activeElement.nodeName== "browser" ?gBrowser.contentDocument.activeElement.dispatchEvent(evt):document.activeElement.dispatchEvent(evt);} //Begin alert("Privet"); setTimeout(press_return,2000);
Я думаю, что этот код будет выполняться на текущей вкладке браузера, а Alert появился не в браузере, а на рабочем столе и блокирует выполнение следующего кода до тех пор, пока мы не нажмём OK или Enter. Поэтому надо прописать нажатие RETURN не на текущей вкладке, а как-то перехватить у Алерта управление клавиатурой и нажать программно Enter, но как это сделать- не знаю.
Отредактировано dedfor (03-01-2017 01:05:39)
Отсутствует
У меня выполняется функция decodeURIComponent (string)
Если string содержит какой то хитромудрый символ, функция ничего не конвертирует, только возвращает ошибку malformed URI sequence
А можно сделать, чтобы функция через этот символ "перепрыгнула" и работала дальше? А еще лучше, перепрыгнуть и этот символ заменить скажем на * чтоб я видел, что в этом месте функция споткнулась.
Отсутствует
beggrr
Можно попробовать что-нибудь типа вот такого:
var unvalidURI = "https://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%9F%D0%BE%D0%B8%D1%81%D0%BA#test:%D0:%D0%D1:%D0%D1%D2:%D0%A1%D0%D0"; function tryDecodeURI(str) { try { return decodeURIComponent(str); } catch(e) { } return str.replace(/(?:%[\dA-F]{2})+/g, function(s) { var rest = ""; do { try { return decodeURIComponent(s) + rest; } catch(e) { } // Strip last %NN and try decode again rest = s.slice(-3) + rest; s = s.slice(0, -3); } while(s.length >= 3); return s + rest; }); } tryDecodeURI(unvalidURI);
При обнаружении неперекодируемой последовательности %NN%NN… начнет убавлять с конца, пока не сможет сконвертировать (или пока не срежет все символы).
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Всем привет! У меня проблемы с несколькими кнопками, выложенными здесь.
1. Консоль браузера в вкладке / боковой панели ( Firefox24-38 ) от 06.10.2013.
Не работает.
При этом в обычной консоли браузера выдается сообщение об ошибке:
ReferenceError: can't access lexical declaration `url' before initialization button.js:5:1 anonymous/this.onload/this.onclick chrome://custombuttons-context/content/button.js:5:1 SyntaxError: expected expression, got end of script[Подробнее] button.js:1:7365 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
UPD: установил свежую версию с сайта - рбт.
Такие же проблемы выдаются с другими кнопками:
2. FFolders не рбт.
19:31:16.197 SyntaxError: expected expression, got end of script 1 button.js:1:5070 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
19:42:45.465 SyntaxError: expected expression, got end of script 1 button.js:1:34238 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
19:47:12.869 NS_ERROR_UNEXPECTED: 1 cbbutton.js:216 custombutton.xmlFormatURI chrome://custombuttons/content/cbbutton.js:216:15 custombutton.buttonGetURI chrome://custombuttons/content/cbbutton.js:235:10 <анонимная> chrome://custombuttons/content/cbbuttonimpl.js:85:10 VisibleConv chrome://custombuttons-context/content/button.js:316:9 saveCB chrome://custombuttons-context/content/button.js:274:1 lbMouse chrome://custombuttons-context/content/button.js:172:72 anonymous/this.onclick chrome://custombuttons-context/content/button.js:39:1 19:47:12.874 SyntaxError: expected expression, got end of script 1 button.js:1:34238 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
19:55:05.408 TypeError: document.getElementById(...) is null 1 button.js:6:16 anonymous/this.one chrome://custombuttons-context/content/button.js:6:16 oncommand chrome://browser/content/browser.xul:1:1
19:55:28.321 TypeError: document.getElementById(...) is null 1 button.js:11:16 anonymous/this.two chrome://custombuttons-context/content/button.js:11:16 oncommand chrome://browser/content/browser.xul:1:1
19:56:02.312 TypeError: document.popupNode is null 1 browser.xul:1:1 oncommand chrome://browser/content/browser.xul:1:1
19:59:49.872 SyntaxError: expected expression, got end of script 1 button.js:1:19749 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
20:01:10.507 SyntaxError: expected expression, got end of script 1 button.js:1:7624 <анонимная> chrome://custombuttons-context/content/button.js:1:2 custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3 custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4 onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
PS: Еще вопрос, который наверняка обсуждался, но я не нашел:
Почему кнопки и само дополнение Custom Buttons не синхронизируется с профилем?
xseed
Раздел - Готовые кнопки. Там много интересного чего есть, в том числе и требуемое.
http://forum.mozilla-russia.org/viewtop … 86#p625686
Спасибо! Нашел парочку:
Переключить JavaScript
Загружать изображения на страницах
Отредактировано xseed (03-01-2017 20:22:39)
Три студента и лопата заменяют экскаватор
Отсутствует
В общем, не хватает такой функции - что, ежели когда набил свой фирефокс кнопками и расширениями, нет простой возможности откатить на этот созданный оптимальный порядок. Та кнопка "Восстановить" в "Настройке панелей инструментов" только добавляет сложностей - я нажимаю ее нечаянно на таче ноута, и весь интерфейс, как корова языком, как говорится... Еще и запроса на подтверждение нет
Так что есть нужда в пункте меню, выполнение которого будет восстанавливать заданное полжение кнопок на тулбарах, а не то, что идет из коробки. Заданное, хотя бы для начала, в самом коде скрипта. У меня в файле конфига, например, нав.тулбар идет таким порядком:
currentset="unified-back-forward-button,custombuttons-button3,reload-button,stop-button,urlbar-container,search-container,custombuttons-button0,bookmarks-button,bookmarks-menu-button,history-button,downloads-button,custombuttons-button9,custombuttons-button2,lmnpop-toolbtn,webrtc-status-button,frigateMainMenu,tb-all-menus"
Т.е. можно задать положение всего - и CB и расширений и т.д.
Автор Custom Buttons тут давно не показывался так что некому добавить в Custom Buttons возможность откатить. И для таких вопросов не нужно создавать отдельную тему, а надо спрашивать тут!
Отсутствует
Быстрый доступ к менеджеру паролей.( Firefox ) от 04.01.2017.
Открыть окно с сохранёнными паролями, отфильтрованное по домену открытой страницы.Код кнопки и инициализации:Код кнопки:Выделить кодКод:
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%u041F%u0430%u0440%u043E%u043B%u0438%20%u0441%u0430%u0439%u0442%u043E%u0432%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACc0lEQVQ4jZXRXUiTARTG8ROubjYn4oUytUbFlG2+mro25yBBS8wsnBYLpJna0PlRkUpYRpiKlJqJhJhdSIJfCBUoigQlYQiWpgsnmak4bdWcZts7nfPpqiun2bn//TmcQ7TLqBkKuBbjP1B9Wb7UkH18repS0EJ+NP9lwlHi7+aIiChLymXqdCdWVww6rH+JhW1CAdagAPspCnfVgUtX5eS7Iz5P5FGuiZh3fNUAZhkwF4n+WuGKNoxbWab267FNKFB8ynNcH0M8t4F0CefhzNsbgFkG52w4NqfEuHXWa4qIKEPKqxhuloI1yJHF0GO3gYJo7x7LqAZYZLDxWQTH2BEYu4Su4pP8D513xIsr7zWY7UtEnmrfgNtArorf92MkGZgLwuakGPZRGdixONgMKVif1sExV4KFwRQUqMh9ICOEU2PsTQEWlHBNx4I1qmE3ZoKdKYbzWyWclqcwdEchnaFmt4H8SMGx5zWJWB5NBUzZcJoKsWGuwqa1CVv2F2Dn76E0njMZF0Fe2w8YRsJnZUms81c7+utCwRp1cFnrgd9tcNk6YTXexIOLvGW9kPy2v8+bvO5nKUwbax1oLZHA8VGEwaYENOcJHI25B+21Wp/v+Up6pQkigdvVCxMODTmsHWgpUWFrXILXT5JRrRWyusMUkhxMPgwR1y0kIroi47baLW1ouR0Py5twlJ7eP6NXckcKlSTdEf2dNDGnwvGzY6u3IR2NOSKUn/Mwnwkg/39CIqI0CZU5V7tc7zqLUJ/JQK+iJCI6sCdMRJQj57UPdxeht+4CHml9nRoBBe4ZExHlBpMoJ4pruh7jOaQLJdV/YSL6A4IrN1kmwC2QAAAAAElFTkSuQmCC%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%20host%20%3D%20content.document.domain.replace%28/%5Ewww./g%2C%27%27%29%3B%0A//%20alert%28host%29%3B%0Awindow.openDialog%28%22chrome%3A//passwordmgr/content/passwordManager.xul%22%2C%20%22SignonViewerDialog%22%2C%20%27%27%2C%20%7BfilterString%3A%20host%7D%29%3B%0A%0A%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Инициализация:
Выделить кодКод:
var host = content.document.domain.replace(/^www./g,''); window.openDialog("chrome://passwordmgr/content/passwordManager.xul", "SignonViewerDialog", '', {filterString: host});
Отсутствует
Подскажите, пожалуйста, простенький код простенькой кнопки, в которой вписано несколько кодов. При наведении курсора на эту кнопку появляется выпадающее меню, где я выбираю и нажимаю нужный пункт и именно он выполняется. То-есть кнопка с кнопками или папка с кнопками. Спасибо.
Отредактировано dedfor (05-01-2017 11:41:56)
Отсутствует
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7 Спасибо, конечно, я начну разбираться с этим кодом, но там все комментарии на английском и очень большой и сложный код. Я раньше помру чем в нём разберусь (мне 66 лет ).
Ведь я же просил простенький код? Мне бы код на два пункта меню: один отрывает alert("1"), а второй- alert("2"), типа шаблона , который я уже докумекаю под себя.
Отредактировано dedfor (05-01-2017 14:56:38)
Отсутствует
Ведь я же просил простенький код? Мне бы код на два пункта меню: один отрывает alert("1"), а второй- alert("2"), типа шаблона , который я уже докумекаю под себя.
// Настройка функций кликов мыши ............. this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); // Создать меню ............. var array = [ "alert('1')", "alert('2')", "alert('3')", "alert('4')" ]; var menuPopup = self.appendChild(document.createElement("menupopup")); array.forEach(cmd=> { var menuItem = document.createElement("menuitem"); menuItem.setAttribute("label", cmd); menuItem.onclick =()=> eval( cmd.toString() ); menuPopup.appendChild( menuItem ); }); menuPopup.setAttribute("onclick", "event.stopPropagation()");
Отсутствует
SyntaxError: expected expression, got end of script[Подробнее]
button.js:1:7365 <анонимная> chrome://custombuttons-context/content/button.js:1:2
custombutton.buttonCbExecuteCode chrome://custombuttons/content/cbbutton.js:265:3
custombutton.buttonCommand chrome://custombuttons/content/cbbutton.js:272:4
onxblcommand chrome://custombuttons/content/toolbarbutton.xml:35:5
Не подскажете, почему в браузере такая проблема с кодом вываливается?
Отредактировано xseed (06-01-2017 01:01:31)
Три студента и лопата заменяют экскаватор
Отсутствует
xseed
Ну, например, подобную ошибку можно получить, если
вкладку Код заполнить строкой URL кнопки, и нажать кнопку.
То есть как-будто протокол custombutton: это метка, а затем
длинный однострочный комментарий (//…) и всё, скрипт закончился.
Отсутствует
xseed
Ну, например, подобную ошибку можно получить, если
вкладку Код заполнить строкой URL кнопки, и нажать кнопку.То есть как-будто протокол custombutton: это метка, а затем
длинный однострочный комментарий (//…) и всё, скрипт закончился.
Так и есть, спасибо!
PS: Просто в разделе со всеми готовыми кнопками спойлеры - "Код кнопки" и "Код инициализации", а надо писать "URL кнопки" и "Код инициализации", чтобы не вводить людей в заблуждение). А то можно подумать так, что "Код кнопки вставляю в Код, а код инициализации в инициализацию"
Отредактировано xseed (09-01-2017 12:30:26)
Три студента и лопата заменяют экскаватор
Отсутствует
Добрый день! Помогите оформить код в кнопку для копирования HTML выделенного фрагмента текста через горячую клавишу, например, CTRL-ALT-C.
Нашел кусок кода:
var df = document.commandDispatcher.focusedWindow.getSelection().getRangeAt(0).cloneContents(); var tmp = document.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmp.appendChild(df); const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); gClipboardHelper.copyString(tmp.innerHTML)
А как его включить в инициализацию, не знаю. И еще горячую клавишу надо как-то навесить. Что посоветуете?
Есть дополнение CopyHTML, оно копирует код через пункт контекстного меню, но его вызывать всякий раз долго. Проще воспользоваться горячей клавишей.
Три студента и лопата заменяют экскаватор
Отсутствует