Здравствуйте, помогите пожалуйста добавить в код поиск по закладкам
/*Initialization Code*/ gBrowser.currentURI.spec == "about:customizing" || (popupset => { var data = { "folder=TOOLBAR": {code: "KeyB", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "folder=BOOKMARKS_MENU": {code: "KeyM", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "folder=UNFILED_BOOKMARKS": {code: "KeyU", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} , "sort=8&maxResults=16": {code: "KeyN", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false} }; popupset.id = "CB" + _id.slice(20) + "-popupset"; addDestructor(() => popupset.remove()); var popups = []; for(var [place, shortcut] in Iterator(data)) { var box = popupset.appendChild(document.createElement("box")); var popup = box.appendChild(document.createElement("menupopup")); for(var [attributeName, attributeValue] in Iterator({ placespopup: "true", context: "placesContext", openInTabs: "children", tooltip: "bhTooltip", popupsinherittooltip: "true", onpopupshowing: "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:" + place + "');", oncommand: "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);", onclick: "BookmarksEventHandler.onClick(event, this.parentNode._placesView);" })) popup.setAttribute(attributeName, attributeValue); popups.push(popup); popup.shortcut = shortcut; } var x, y; addEventListener("mousemove", e => {x = e.screenX; y = e.screenY}); addEventListener("keydown", e => { popups.some(popup => { for(var property in popup.shortcut) { if (popup.shortcut[property] != e[property]) return false; } e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); popup.openPopupAtScreen(x, y + 1); return true; }); }, true); })(document.documentElement.appendChild(document.createElement("popupset")));
Отсутствует
Повторюсь...
bunda1 и Dumby А где/как хранится/взять что была ошибка на странице?
В коде
(id => { var observer, en = Services.obs.enumerateObservers("domwindowopened"); while(en.hasMoreElements()) { var obs = en.getNext(); obs = "wrappedJSObject" in obs && obs.wrappedJSObject; if (obs && obs.id == id) {observer = obs; break;} } if (!observer) { observer = { id: id, get wrappedJSObject() { return this; }, init: function() { Services.obs.addObserver(this, "domwindowopened", false); this.initialized = true; }, destroy: function() { if (!this.initialized) return; this.initialized = false; Services.obs.removeObserver(this, "domwindowopened"); }, observe: function(win) { win.addEventListener("beforeunload", this, false); }, handleEvent: function(e) { var win = e.target.defaultView; win.removeEventListener("beforeunload", this, false); win.arguments && win.arguments[0] && this.checkWin(win); }, checkWin: function(win) { var [arg] = win.arguments; try {arg.QueryInterface(Ci.nsIPropertyBag)} catch(ex) {return;} arg.getProperty("title") == this.title && win.close(); }, get title() { delete this.title; return this.title = Cc["@mozilla.org/intl/stringbundle;1"] .getService(Ci.nsIStringBundleService) .createBundle("chrome://global/locale/dom/dom.properties") .GetStringFromName("KillScriptTitle"); } }; observer.init(); } addDestructor(reason => { if (reason == "update" || reason == "delete") observer.destroy() }, observer); })("killScriptCloser_" + _id);
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
А где/как хранится/взять что была ошибка на странице?
В коде
Просто он очень часто срабатывает... может быть очень часто... IMHO.
Не понял. Код не предназначен для практического использования.
Просто, насколько я понял, bunda1 хотел закрыть определённый commonDialog,
но возникли затруднения. Вот я и нахлобучил его вариантом. Только и всего.
Error: Script terminated by timeout at: ...
Но если прям интересно, то можно повторить как сообщение
//arg.getProperty("title") == this.title && win.close(); if (arg.getProperty("title") == this.title) { win.close(); LOG(arg.getProperty("text")); }
Отсутствует
А где/как хранится/взять что была ошибка на странице?
Замени win.close(); на win.close( LOG("Ошибка: " + new Date()) ); и смотри в консоли ошибок - chrome://global/content/console.xul сообщения. Но вряд ли таких ошибок будет много у меня например таких ошибок не бывает.
Добавлено 25-01-2016 11:27:03
Просто, насколько я понял, bunda1 хотел закрыть определённый commonDialog,
но возникли затруднения. Вот я и нахлобучил его вариантом. Только и всего.
И за это спасибо.
Отредактировано bunda1 (25-01-2016 11:27:03)
Отсутствует
Выполнил кривую кнопку. После этого перестал открывать редактор кнопок, новые не добавляются. Перезапустил файрфокс - исчезли мои старые кнопки, создать все так же не могу. Пробовал переустановить аддон - эффекта не принесло. Что делать?
Отсутствует
DarkMasterW проверь файл в профиле - C:\Users\SASA\AppData\Roaming\Mozilla\Firefox\Profiles\ox7niog3.MAIN\custombuttons -> buttonsoverlay.xul и там же есть папка backup. Если ошибка не была критической, то всё можно восстановить, просто файл buttonsoverlay.xul с нарушенной структурой, но в ручную это восстанавливается — я это делал многократно.... всякое бывало.
Удали из профиля Firefox папку custombuttons и переустановиви Custom Buttons.
Да, и так я тоже делал... т.е. достойный/нормальный вариант решения проблемы.
bunda1 и Dumby Повторюсь, но перефразируя — Как включить/выключить скрипт убирающий — Ошибка на странице? Пока помогает только комментирование скрипта.
Отредактировано Indomito (25-01-2016 22:58:50)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Спасибо, помогло.
Промучился всю ночь, так и не понял почему в консоли работает, а в кнопке нет:
window.alert("1"); var range = document.createRange(); window.alert("2"); var endNode = document.getElementsByTagName("p").item(4); window.alert("22"); range.setStart(endNode, 0); window.alert("2"); var endNode = document.getElementsByTagName("p").item(6); window.alert("3"); range.setEnd(endNode, 0); window.alert("3"); var str = range.toString(); window.alert(str);
Вот эта строка приводит к обрыву выполнения скрипта:
range.setStart(endNode, 0);
Можно как-то увидеть собщение об ошибке? Try/catch или не срабатывает или мои попытки его использовать были кривыми...
Отсутствует
Можно как-то увидеть собщение об ошибке? Try/catch или не срабатывает или мои попытки его использовать были кривыми...
Метка времени: 26.01.2016 7:26:46 Ошибка: TypeError: Argument 1 of Range.setStart is not an object. Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button94@code Строка: 9
Отсутствует
Как было получено это сообщение об ошибке? У меня просто тихо помирает.
Почему внутри кнопки внезапно объект перестает быть объектом? Есть подозрение, что из кнопки нода просто не находится в отличии от консоли. Возможно необходимо как-то дополнительно сослаться, где именно искать? Документ/какая из вкладок и т.д.?
Отсутствует
Вот тут и во всех прочих местах при работе из кнопки document будет указывать не на страницу, а на документ окна браузера.
Надо заменить на content.document.
Но все *AsCPOW тоже грозятся выпилить.
Впрочем, можно переделать через frame-скрипт (который до сих пор нельзя выгрузить, да – здравствуйте, утечки памяти).
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Доброго дня, парни..! Обновился до 44-й и ни одна кнопка не работает ( Я один такой "счастливчик"?
Это известная проблема: в about:config переключи xpinstall.signatures.required на false, потом 21-12-2015 23:35:52 или 09-10-2015 12:29:01
Отсутствует
bunda1 Повторюсь, но перефразируя — Как включить/выключить скрипт убирающий — Ошибка на странице? Пока помогает только комментирование скрипта.
По простому:
(id => { self._handleClick =()=> self.checked = !self.checked; var observer, en = Services.obs.enumerateObservers("domwindowopened"); while(en.hasMoreElements()) { var obs = en.getNext(); obs = "wrappedJSObject" in obs && obs.wrappedJSObject; if (obs && obs.id == id) {observer = obs; break;} } if (!observer) { observer = { id: id, get wrappedJSObject() { return this; }, init: function() { Services.obs.addObserver(this, "domwindowopened", false); this.initialized = true; }, destroy: function() { if (!this.initialized) return; this.initialized = false; Services.obs.removeObserver(this, "domwindowopened"); }, observe: function(win) { win.addEventListener("beforeunload", this, false); }, handleEvent: function(e) { var win = e.target.defaultView; win.removeEventListener("beforeunload", this, false); win.arguments && win.arguments[0] && this.checkWin(win); }, checkWin: function(win) { var [arg] = win.arguments; try {arg.QueryInterface(Ci.nsIPropertyBag)} catch(ex) {return;} arg.getProperty("title") == this.title && self.checked && win.close(); }, get title() { delete this.title; return this.title = Cc["@mozilla.org/intl/stringbundle;1"] .getService(Ci.nsIStringBundleService) .createBundle("chrome://global/locale/dom/dom.properties") .GetStringFromName("KillScriptTitle"); } }; observer.init(); } addDestructor(reason => { if (reason == "update" || reason == "delete") observer.destroy() }, observer); })("killScriptCloser_" + _id);
Нажимаешь на кнопку и скрипт работает, нажимаешь еще и не работает, ну и так далее.
Отсутствует
Метка времени: 26.01.2016 7:26:46
Ошибка: TypeError: Argument 1 of Range.setStart is not an object.
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button94@code
Строка: 9
А как текст ошибки то был получен? Отладка вслепую не очень продуктивна...
Вот тут и во всех прочих местах при работе из кнопки document будет указывать не на страницу, а на документ окна браузера.
Надо заменить на content.document.
Спасибо, заработало А кнопка нажатая на разных вкладках продолжит работать для каждой вкладки независимо? Т.е. будет некий цикл бесконечный. Если я запущу его на вкладке 1, то это как-то отразится на вкладке 2? Будет ли возможность запустить независимую копию скрипта на вкладке 3?
Отсутствует
А как текст ошибки то был получен? Отладка вслепую не очень продуктивна...
Открываешь консоль ошибок: chrome://global/content/console.xul и смотришь.
Отсутствует
Вроде даже пошло помаленьку Подскажите, если не сложно, еще один момент. Написал копирование текста со страницы: копирует, выводит алертом корректно. Написал сохранение в файл: ввожу строку, сохраняю, файл дописывается, все прекрасно. Однако если стринг с содержимым страницы сохранить, то получается несусветный бред. Причем я даже таких кодировок не видел никогда. В чем фишка?
// window.alert("1"); var range = content.document.createRange(); // window.alert("2"); var endNode = content.document.getElementsByTagName("div").item(3); // window.alert("3"); // window.alert(endNode); // window.alert("4"); range.setStart(endNode, 0); // window.alert("5"); var endNode = content.document.getElementsByTagName("div").item(3); // window.alert("6"); range.setEndAfter(endNode, 0); // window.alert("7"); // window.alert(endNode); // window.alert(8); var str = range.toString(); // window.alert(9);// window.alert(str);// window.alert(10); timestamp = (new Date()).toLocaleFormat("%Y.%d.%m - %H:%M:%S"); // window.alert(timestamp); str = timestamp + "\r\n" + str; window.alert(str); // converter.charset = "UTF-8"; // str = converter.convertToInputStream(str); //str = "ywfpywfpywfp"; var aFile = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); //window.alert("1"); aFile.initWithPath( "d:\\1.txt" ); var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]. createInstance(Components.interfaces.nsIFileOutputStream); stream.init(aFile, 0x02 | 0x08 | 0x10, 0666, 0); // readwrite, create, truncate stream.write(str, str.length); if (stream instanceof Components.interfaces.nsISafeOutputStream) { stream.finish(); } else { stream.close(); }
0D0A1438413A1A303B353D3430404C1F354035323E3447383A143B4F203C3E31383B4C3D3E333E1A3E48353B353A426C6F67676572243E423E334030443838123834353E143E3A433C353D424B124135203F403E34433A424B20BB
Отредактировано DarkMasterW (26-01-2016 21:23:06)
Отсутствует
Всё... Сегодня приплыл Firefox 44 и оригинальный CustomButtons уже не работает.
для восстановления работоспособности:
1.
откройте about:config
найдите параметр xpinstall.signatures.required и установите его значение в false
2.
скачайте архив из первого собщения этого форума:
http://custombuttons.sourceforge.net/fo … f=5&t=3656
3.
переименуйте скачанный архив из zip в xpi
4.
установите аддон (удалять оригинальный нет необходимости - новый аддон встанет поверх него)
с выходом FF45 , если авторы не обновят версию или кто-то не создаст подписанный xpi - про CustomButtons можно забыть
Отсутствует
реальная строка:
ДискКалендарьПереводчикДля мобильногоКошелекBloggerФотографииВидеоДокументыВсе продукты »
А вот если просто записать твой текст на десктоп то он отображается без проблем:
var timestamp = (new Date()).toLocaleFormat("%Y.%d.%m - %H:%M:%S"); var str = timestamp + "\r\n" + "ДискКалендарьПереводчикДля мобильногоКошелекBloggerФотографииВидеоДокументыВсе продукты"; window.alert(str); var str = convertFromUnicode("UTF-8", str); var file = Services.dirsvc.get('Desk', Components.interfaces.nsIFile); file.append("1.txt"); var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); stream.init(file, 0x02|0x08|0x20, 0666, 0); stream.write(str, str.length); stream.close(); file.launch();
Странно, в чём тут разница .
Отсутствует
вот здесь:
var str = convertFromUnicode("UTF-8", str);
Правда из чего он конвертирует, честно, не понимаю.
Отсутствует
pag77 Дело не в FF 44, а креше 44-й версии, такого давно не было(частота падений) + они палитру поменял... это я вообще не понял. Думаю 45-я версия будет ужасной... или же баги отловят — увидим.
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
pag77 Дело не в FF 44, а креше 44-й версии, такого давно не было(частота падений) + они палитру поменял... это я вообще не понял. Думаю 45-я версия будет ужасной... или же баги отловят — увидим.
Для рядового пользователя, которых очень много среди 81 239 пользователей, наплевать на то что в FF44 что-то поменялось - это проблема аддона, которую надо исправить.
Вот уже и отзывы появились о проблеме с 44:
https://addons.mozilla.org/ru/firefox/a … s/reviews/
Отсутствует
Есть скрипт, есть кнопка. Кнопка включает/выключает работу скрипта через создание/удаление таймера. Все шуршит. Однако если сменить вкладку, то работа скрипта будет продолжена уже с другим документом. Насколько я понимаю необходимо content.document применить к вкладке полученной через gBrowser. Тем не менее остается вопрос, как наиболее грамотно будет сделать функционал кнопки привязанным к вкладке? Возможно ли как-то ограничиться областями видимости для создания флагов вкл/выкл скрипт или придется заводить глобальный массив с таймерами, ассоциировать каждую вкладку с некоторым элементом массива в котором будет храниться ид таймера и ссылка на объект вкладки?
Отсутствует
ищу кнопку (я так понимаю, код инициализации), которая позволяет по двойному щелчку ЛКМ на активной вкладки перейти в начало страницы (эквивалент кнопки Home на клавиатуре). Спасибо!!
Отсутствует