А почему имено HTML?
Мне в HTML удобнее.
P.S. Да и привык уже делать экспорт закладок в HTML-файл.
Отредактировано unter_officer (26-07-2017 14:50:44)
«The Truth Is Out There»
Отсутствует
bunda1 пишетА почему имено HTML?
Мне в HTML удобнее.
P.S. Да и привык уже делать экспорт закладок в HTML-файл.
Попробуй это, about:config=browser.bookmarks.autoExportHTML, //BookmarksHtml [false=places.sqlite]
Он сохраняет все закладки не в "places.sqlite" как обычно а в html файл, и потом в профиле будешь забирать...
Сразу предупреждаю иконки могут сломаться к закладкам... поэтому делай с бекапом, и вообще надо поэксперементировать с этим, удачи!
Отредактировано Gladius333 (26-07-2017 19:55:54)
Отсутствует
Gladius333
Мне это дано известно, что следует из сообщения которое Вы процитировали и в котором говорится, что я и так делаю экспорт закладок в HTML-файл.
Вопрос в том, что слишком далеко добираться до стандартной возможности Экспорта/Импорта закладок:
• Закладки -> Показать все закладки -> Импорт и резервные копии -> Экспорт закладок в HTML-файл…
• Закладки -> Показать все закладки -> Импорт и резервные копии -> Импорт закладок из HTML-файла…
Поэтому я и попросил сделать кнопку, чтобы разместить её на панели и не лазить чёрт знает куда, когда возникает необходимость Экспорта/Импорта.
Отредактировано unter_officer (26-07-2017 21:04:22)
«The Truth Is Out There»
Отсутствует
bunda1 пишетА почему имено HTML?
Мне в HTML удобнее.
А если так:
// "Создать резервную копию закладок на рабочий стол без запроса" в меню "Закладки", от 29.01.2016. .................. (sep => { var menuitem = sep.parentNode.insertBefore(document.createElement("menuitem"), sep); menuitem.setAttribute("label", "Создать резервную копию закладок на рабочий стол"); addDestructor(()=> { menuitem.remove() }); menuitem.onclick =()=> { var file = Services.dirsvc.get("Desk", Ci.nsIFile); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".json"; Cu.import("resource://gre/modules/PlacesBackups.jsm", {}).PlacesBackups.saveBookmarksToJSONFile( Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(path) ) var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide(self.label, "Сохранил резервную копию закладок на рабочий стол"); setTimeout(()=> alertsService.closeAlert(), 3000); }; })(document.getElementById("organizeBookmarksSeparator"));
Отсутствует
Gladius333
Мне это дано известно, что следует из сообщения которое Вы процитировали и в котором говорится, что я и так делаю экспорт закладок в HTML-файл.Вопрос в том, что слишком далеко добираться до стандартной возможности Экспорта/Импорта закладок:
• Закладки -> Показать все закладки -> Импорт и резервные копии -> Экспорт закладок в HTML-файл…
• Закладки -> Показать все закладки -> Импорт и резервные копии -> Импорт закладок из HTML-файла…Поэтому я и попросил сделать кнопку, чтобы разместить её на панели и не лазить чёрт знает куда, когда возникает необходимость Экспорта/Импорта.
А я понял, кстати я тоже за, интересно как можно вывести его...
Может само меню вывести, хм.... кстати само меню id=maintenanceButton, если есть примеры других кнопок можно подшаманить)
Отредактировано Gladius333 (26-07-2017 21:23:27)
Отсутствует
bunda1
Спасибо, но это не то, что хотелось бы.
Во-первых сохраняет не в HTML-файл.
Во-вторых, если уж и лазить в меню "Закладки", то тогда можно и это установить _https://addons.mozilla.org/ru/firefox/addon/export-bookmarks/.
Хотелось бы вынести стандартную возможность Экспорта/Импорта закладок в кнопку, и именно HTML.
«The Truth Is Out There»
Отсутствует
unter_officer пишетbunda1 пишетА почему имено HTML?
Мне в HTML удобнее.
А если так:
Он про эту кнопку, если через ид перекинуть к примеру в контекст меню? или можно в кнопку.
Отсутствует
Gladius333
Что за поведение? мне он всем устрайвает) хотя немного не удобно
Ну а ПКМ на "Вырезать'',''Копировать'',''Свойства''получается нажать? У меня нет, меню закрывается прежде чем я успеваю клацнуть мышкой.
Отсутствует
Он про эту кнопку, если через ид перекинуть к примеру в контекст меню? или можно в кнопку.
Просто перекинуть не получится потому что этот пункт находится в другом окне.
Отсутствует
Он про эту кнопку, если через ид перекинуть к примеру в контекст меню? или можно в кнопку.
Gladius333
Я повозился с этим дополнением: _https://addons.mozilla.org/ru/firefox/addon/export-bookmarks/ и мне удалось переместить пункт ЭКСПОРТА в контекст меню (если не ошибаюсь, то сюда: id="contentAreaContextMenu").
Но раз уж установлен Custom Buttons, не хочется пользоваться лишним дополнением. Да и ИМПОРТА там нет, только ЭКСПОРТ.
«The Truth Is Out There»
Отсутствует
bunda1
Я так понял, что задача слишком сложная.
Тогда не могли бы Вы переделать это дополнение, которое только для Экспорта в HTML-файл https://addons.mozilla.org/ru/firefox/a … bookmarks/, в кнопку? Фиг и ним, с Импортом из HTML.
Очень уж не хочется лишнее дополнение устанавливать.
Отредактировано unter_officer (26-07-2017 22:08:15)
«The Truth Is Out There»
Отсутствует
bunda1
Я так понял, что задача слишком сложная.
Тогда не могли бы Вы переделать это дополнение, которое только для Экспорта в HTML-файл https://addons.mozilla.org/ru/firefox/a … bookmarks/, в кнопку? Фиг и ним, с Импортом из HTML.
Очень уж не хочется лишнее дополнение устанавливать.
Завтра посмотрю.
Отсутствует
Что касается этой кнопки:
Создать резервную копию закладок на рабочий стол без запроса" в меню "Закладки"Выделить кодКод:
// "Создать резервную копию закладок на рабочий стол без запроса" в меню "Закладки", от 29.01.2016. .................. (sep => { var menuitem = sep.parentNode.insertBefore(document.createElement("menuitem"), sep); menuitem.setAttribute("label", "Создать резервную копию закладок на рабочий стол"); addDestructor(()=> { menuitem.remove() }); menuitem.onclick =()=> { var file = Services.dirsvc.get("Desk", Ci.nsIFile); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".json"; Cu.import("resource://gre/modules/PlacesBackups.jsm", {}).PlacesBackups.saveBookmarksToJSONFile( Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(path) ) var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide(self.label, "Сохранил резервную копию закладок на рабочий стол"); setTimeout(()=> alertsService.closeAlert(), 3000); }; })(document.getElementById("organizeBookmarksSeparator"));
То можно и в HTML:
(sep => { var menuitem = sep.parentNode.insertBefore(document.createElement("menuitem"), sep); menuitem.setAttribute("label", "Создать резервную копию закладок на рабочий стол"); addDestructor(()=> { menuitem.remove() }); menuitem.onclick =()=> { var file = Services.dirsvc.get("Desk", Ci.nsIFile); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".html"; Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm", {}).BookmarkHTMLUtils.exportToFile( Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(path) ) var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide(self.label, "Сохранил резервную копию закладок на рабочий стол"); setTimeout(()=> alertsService.closeAlert(), 3000); }; })(document.getElementById("organizeBookmarksSeparator"));
Но всё же хочется с выбором папки, куда сохранять.
И чтобы всё это было не в меню "Закладки", а при нажатии на кнопку.
Так же хочется ещё и Импорт закладок из HTML-файла.
P.S. Код, который я дал, хоть и рабочий, но в консоль браузера пишет ошибку. Заметил я это только сегодня. Как исправить эту ошибку я не знаю.
Пишет что-то типа: Passing an nsIFile to BookmarksHTMLUtils.exportToFile is deprecated. Please use an OS.File path string instead. https://developer.mozilla.org/docs/JavaScript_OS.File
Отредактировано unter_officer (27-07-2017 13:44:50)
«The Truth Is Out There»
Отсутствует
Но всё же хочется с выбором папки, куда сохранять.
И чтобы всё это было не в меню "Закладки", а при нажатии на кнопку.
Так же хочется ещё и Импорт закладок из HTML-файла.
По быстрому:
this.onmousedown =e=> { if ( e.button == 0 ) self.timer = setTimeout(()=> { self.onmouseup = ''; setPathToBookmarksFolder(); }, 500); this.onmouseup =e=> { if ( e.button ) return; clearTimeout(self.timer); exportsBookmarksToHTMLFile(); } if ( e.button == 1 ) openBookmarksFolder(); if ( e.button == 2 ) gShowPopup(this); }; self.onclick =e=> e.preventDefault(); function exportsBookmarksToHTMLFile() { var path = getPathToBookmarksFolder(); var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(path); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".html"; Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm", {}).BookmarkHTMLUtils.exportToFile( Components.Constructor("@mozilla.org/file/local;1", "nsILocalFile", "initWithPath")(path) ) var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide("Экспорт закладок в HTML-файл", "Сохранил резервную копию закладок в " + path); setTimeout(()=> alertsService.closeAlert(), 3000); }; function openBookmarksFolder() { var path = getPathToBookmarksFolder(); var folder = Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(path); folder.exists() && folder.launch(); }; function setPathToBookmarksFolder() { var fp = window.makeFilePicker(); fp.init(window, "Укажите папку для сохранения закладок!", fp.modeGetFolder); fp.open(result => result == fp.returnOK && cbu.setPrefs("CB.exportsBookmarksToHTMLFile.path", convertFromUnicode("UTF-8", fp.file.path))); }; function getPathToBookmarksFolder() { try { var path = Services.prefs.getComplexValue("CB.exportsBookmarksToHTMLFile.path", Ci.nsISupportsString).data } catch(e) { path = "C:\\" }; return path; }; function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; this.onmouseover =()=> { var path = getPathToBookmarksFolder(); this.tooltipText = "Л: Экспорт закладок в HTML-файл \nДЛ: Установить папку для сохранения закладок\ \nС: Открыть папку для сохранения закладок \nП: CB меню\n\nПапка для сохранения закладок без запроса:\n" + path; };
Насчёт импорт закладок я подумаю, пока не знаю что за код в Firefox отвечает за это.
Отсутствует
По быстрому
В принципе всё работает, но при сохранении файла появляется ошибка в консоли:
DEPRECATION WARNING: Passing an nsIFile to BookmarksHTMLUtils.exportToFile is deprecated. Please use an OS.File path string instead.
You may find more details about this deprecation at: https://developer.mozilla.org/docs/JavaScript_OS.File
resource://gre/modules/BookmarkHTMLUtils.jsm 210 BHU_exportToFile
chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button6@init line 1 > Function 32 exportsBookmarksToHTMLFile
chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button6@init line 1 > Function 13 anonymous/this.onmousedown/this.onmouseup
«The Truth Is Out There»
Отсутствует
unter_officer пишетbunda1
Я так понял, что задача слишком сложная.
Тогда не могли бы Вы переделать это дополнение, которое только для Экспорта в HTML-файл https://addons.mozilla.org/ru/firefox/a … bookmarks/, в кнопку? Фиг и ним, с Импортом из HTML.
Очень уж не хочется лишнее дополнение устанавливать.Завтра посмотрю.
bunda1
А Вы это дополнение не ковыряли? Там четыре совсем маленьких файла, может проще его в кнопку переделать?
«The Truth Is Out There»
Отсутствует
В принципе всё работает, но при сохранении файла появляется ошибка в консоли:
this.onmousedown =e=> { if ( e.button == 0 ) self.timer = setTimeout(()=> { self.onmouseup = ''; setPathToBookmarksFolder(); }, 500); this.onmouseup =e=> { if ( e.button ) return; clearTimeout(self.timer); exportsBookmarksToHTMLFile(); } if ( e.button == 1 ) openBookmarksFolder(); if ( e.button == 2 ) gShowPopup(this); }; self.onclick =e=> e.preventDefault(); function exportsBookmarksToHTMLFile() { var path = getPathToBookmarksFolder(); var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(path); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".html"; Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm"); BookmarkHTMLUtils.exportToFile(path).then(null, Cu.reportError); var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide("Экспорт закладок в HTML-файл", "Сохранил резервную копию закладок в " + path); setTimeout(()=> alertsService.closeAlert(), 3000); }; function openBookmarksFolder() { var path = getPathToBookmarksFolder(); var folder = Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(path); folder.exists() && folder.launch(); }; function setPathToBookmarksFolder() { var fp = window.makeFilePicker(); fp.init(window, "Укажите папку для сохранения закладок!", fp.modeGetFolder); fp.open(result => result == fp.returnOK && cbu.setPrefs("CB.exportsBookmarksToHTMLFile.path", convertFromUnicode("UTF-8", fp.file.path))); }; function getPathToBookmarksFolder() { try { var path = Services.prefs.getComplexValue("CB.exportsBookmarksToHTMLFile.path", Ci.nsISupportsString).data } catch(e) { path = "C:\\" }; return path; }; function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; this.onmouseover =()=> { var path = getPathToBookmarksFolder(); this.tooltipText = "Л: Экспорт закладок в HTML-файл \nДЛ: Установить папку для сохранения закладок\ \nС: Открыть папку для сохранения закладок \nП: CB меню\n\nПапка для сохранения закладок без запроса:\n" + path; };
bunda1
А Вы это дополнение не ковыряли? Там четыре совсем маленьких файла, может проще его в кнопку переделать?
Посмотрел и что то позаимствовал для экспорта, но там нет ничего о импорте закладок, если ты об этом.
Отсутствует
unter_officer
Вроде добавил импорт закладок из HTML-файла:
this.onmousedown =e=> { if ( e.button == 0 ) { self.timer = setTimeout(()=> { self.onmouseup = ''; setPathToBookmarksFolder(); }, 500); this.onmouseup =e=> { clearTimeout(self.timer); exportsBookmarksToHTMLFile(); } } if ( e.button == 1 ) { self.timer = setTimeout(()=> { self.onmouseup = ''; importBookmarksOutHTMLFile(); }, 500); this.onmouseup =e=> { clearTimeout(self.timer); openBookmarksFolder(); } } if ( e.button == 2 ) gShowPopup(this); }; self.onclick =e=> e.preventDefault(); function importBookmarksOutHTMLFile() { var fp = window.makeFilePicker(); fp.init(window, "Выберите HTML-файл для импорта закладок", fp.modeOpen); fp.appendFilters(fp.filterHTML); if ( fp.show() == fp.returnCancel ) return; Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm"); BookmarkHTMLUtils.importFromFile(fp.file.path).then(null, Cu.reportError); }; function exportsBookmarksToHTMLFile() { var path = getPathToBookmarksFolder(); var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(path); var path = file.path + "\\bookmarks-" + (new Date()).toLocaleFormat("%Y.%d.%m") + ".html"; Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm"); BookmarkHTMLUtils.exportToFile(path).then(null, Cu.reportError); var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) custombuttons.alertSlide("Экспорт закладок в HTML-файл", "Сохранил копию закладок как HTML-файл в " + path); setTimeout(()=> alertsService.closeAlert(), 3000); }; function openBookmarksFolder() { var path = getPathToBookmarksFolder(); var folder = Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(path); folder.exists() && folder.launch(); }; function setPathToBookmarksFolder() { var fp = window.makeFilePicker(); fp.init(window, "Укажите папку для экспорта закладок!", fp.modeGetFolder); fp.open(result => result == fp.returnOK && cbu.setPrefs("CB.exportsBookmarksToHTMLFile.path", convertFromUnicode("UTF-8", fp.file.path))); }; function getPathToBookmarksFolder() { try { return Services.prefs.getComplexValue("CB.exportsBookmarksToHTMLFile.path", Ci.nsISupportsString).data } catch(e) { return "C:\\" }; }; function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; this.onmouseover =()=> { var path = getPathToBookmarksFolder(); this.tooltipText = "Л: Экспорт закладок в HTML-файл \nДЛ: Установить папку для экспорта закладок\ \nС: Открыть папку для экспорта закладок \nДС: Импорт закладок из HTML-файла\ \nП: CB меню\n\nПапка для экспорта закладок, без запроса:\n" + path; };
Отсутствует
Вроде добавил импорт закладок из HTML-файла
У меня как-то странно работает.
1. На нажатие средней кнопки не реагирует вообще.
2. Если один раз сделать экспорт, то после этого, при нажатии правой кнопки, вместе с появлением меню кнопки параллельно опять делается экспорт.
«The Truth Is Out There»
Отсутствует
bunda1 пишетВроде добавил импорт закладок из HTML-файла
У меня как-то странно работает.
1. На нажатие средней кнопки не реагирует вообще.
А что консоль?
Отсутствует
А что консоль?
В консоли всё чистенько.
bunda1
Я почти не разбираюсь в написании кода. Но у меня появился вопросик. Почему бы не сделать что-то похожее на это:
Нажимаешь на кнопку - появляется меню.
Если в меню выбираешь Экспорт, то открывается стандартное окно браузера с выбором папки сохранения.
Если выбираешь Импорт, то опять же, открывается стандартное окно браузера с выбором файла для импорта.
И не надо будет мудрить с короткими/длинными кликами разных кнопок мыши, в которых можно запутаться.
P.S. Кстати. То дополнение, ссылку на которое я Вам давал несколькими постами выше, при экспорте закладок работает именно по такому алгоритму.
«The Truth Is Out There»
Отсутствует
Почему бы не сделать что-то похожее на это:
http://redload.ru/images/untitlgdg.png
Нажимаешь на кнопку - появляется меню.
Если в меню выбираешь Экспорт, то открывается стандартное окно браузера с выбором папки сохранения.
Если выбираешь Импорт, то опять же, открывается стандартное окно браузера с выбором файла для импорта.
Ну что же ты сразу это не просил Дай иконки из изображения и будет меню.
Отсутствует
unter_officer
Вот заготовка, только иконки замени на свои:
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%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0438%u043B%u0438%20%u0438%u043C%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u043A%u0430%u043A%20HTML-%u0444%u0430%u0439%u043B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bself._handleClick%20%3D%28%29%3D%3E%20menuPopup.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%0A%0Avar%20array%20%3D%20%5B%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20HTML-%u0444%u0430%u0439%u043B%22%2C%20%22exportsBookmarksToHTMLFile%28true%29%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg%3D%3D%22%5D%2C%0A%20%20%20%5B%20%22%u0418%u043C%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0438%u0437%20HTML-%u0444%u0430%u0439%u043B%u0430%22%2C%20%22importBookmarksOutHTMLFile%28%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ%3D%3D%22%5D%2C%20%20%0A%20%20%20%5B%20%22separator%22%20%5D%2C%0A%20%20%20%5B%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20%22openBookmarksFolder%28false%29%22%2C%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%5D%2C%0A%20%20%20%5B%20%22%u042D%u043A%u0441%u043F%u043E%u0440%u0442%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u0432%20HTML-%u0444%u0430%u0439%u043B%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%20%u043D%u0430%20%u0441%u043E%u0445%u0440%u0430%u043D%u0435%u043D%u0438%u0435%22%2C%20%22exportsBookmarksToHTMLFile%28%29%22%2C%20false%20%5D%0A%5D%3B%0Avar%20menuPopup%20%3D%20self.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0Aarray.forEach%28%28m%2Ci%29%3D%3E%20%7B%0A%20%20%20if%20%28%20m%5B0%5D%20%3D%3D%20%22separator%22%20%29%20%7B%20menuPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%20return%20%7D%3B%0A%20%20%20var%20mItem%20%3D%20menuPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20mItem.setAttribute%28%22label%22%2C%20m%5B0%5D%29%3B%0A%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0A%20%20%20mItem.setAttribute%28%22image%22%2C%20m%5B2%5D%20%7C%7C%20array%5Bi-1%5D%5B2%5D%29%3B%20%0A%20%20%20mItem.addEventListener%28%22command%22%2C%20%28%29%3D%3E%20eval%28m%5B1%5D%29%29%3B%0A%7D%29%3B%0AmenuPopup.setAttribute%28%22onclick%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%0A%0Afunction%20importBookmarksOutHTMLFile%28%29%20%7B%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0412%u044B%u0431%u0435%u0440%u0438%u0442%u0435%20HTML-%u0444%u0430%u0439%u043B%20%u0434%u043B%u044F%20%u0438%u043C%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20fp.modeOpen%29%3B%0A%20%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/FileUtils.jsm%22%29%3B%0A%20%20%20fp.displayDirectory%20%3D%20FileUtils.File%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20if%20%28%20fp.show%28%29%20%3D%3D%20fp.returnCancel%20%29%20return%3B%0A%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/BookmarkHTMLUtils.jsm%22%29%3B%0A%20%20%20BookmarkHTMLUtils.importFromFile%28fp.file.path%29.then%28null%2C%20Cu.reportError%29%3B%0A%7D%3B%0A%0A%0Afunction%20exportsBookmarksToHTMLFile%28saveAs%29%20%7B%0A%20%20%20saveAs%20%26%26%20setPathToBookmarksFolder%28%29%3B%0A%0A%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20file.initWithPath%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20var%20path%20%3D%20file.path%20+%20%22%5C%5Cbookmarks-%22%20+%20%28new%20Date%28%29%29.toLocaleFormat%28%22%25Y.%25d.%25m%22%29%20+%20%22.html%22%3B%0A%20%20%20%0A%20%20%20Cu.import%28%22resource%3A//gre/modules/BookmarkHTMLUtils.jsm%22%29%3B%0A%20%20%20BookmarkHTMLUtils.exportToFile%28path%29.then%28null%2C%20Cu.reportError%29%3B%0A%0A%20%20%20if%20%28%20saveAs%20%29%20return%3B%0A%20%20%20var%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%0A%20%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u043B%20%u043A%u043E%u043F%u0438%u044E%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%u043A%u0430%u043A%20HTML-%u0444%u0430%u0439%u043B%20%u0432%20%22%20+%20path%29%3B%0A%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%203500%29%3B%0A%7D%3B%0A%0A%0Afunction%20openBookmarksFolder%28%29%20%7B%0A%20%20%20var%20folder%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%3B%0A%20%20%20folder.initWithPath%28getPathToBookmarksFolder%28%29%29%3B%0A%20%20%20folder.launch%28%29%3B%0A%7D%3B%0A%0A%0Afunction%20setPathToBookmarksFolder%28%29%20%7B%20%20%20%20%20%0A%20%20%20var%20fp%20%3D%20window.makeFilePicker%28%29%3B%0A%20%20%20fp.init%28window%2C%20%22%u0423%u043A%u0430%u0436%u0438%u0442%u0435%20%u043F%u0430%u043F%u043A%u0443%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%21%22%2C%20fp.modeGetFolder%29%3B%0A%20%20%20if%20%28%20fp.show%28%29%20%3D%3D%20fp.returnCancel%20%29%20return%3B%0A%20%20%20cbu.setPrefs%28%22CB.exportsBookmarksToHTMLFile.path%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20fp.file.path%29%29%3B%0A%7D%3B%0A%0A%0Afunction%20getPathToBookmarksFolder%28%29%20%7B%20%20%20%20%20%0A%20%20%20try%20%7B%20return%20Services.prefs.getComplexValue%28%22CB.exportsBookmarksToHTMLFile.path%22%2C%20Ci.nsISupportsString%29.data%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20%22C%3A%5C%5C%22%20%7D%3B%0A%7D%3B%0A%0A%0Afunction%20convertFromUnicode%28charset%2C%20str%29%20%7B%0A%20%20%20var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20converter.charset%20%3D%20charset%3B%0A%20%20%20str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20return%20str%20+%20converter.Finish%28%29%3B%0A%7D%3B%0A%0A%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%20%0A%20%20%20var%20path%20%3D%20getPathToBookmarksFolder%28%29%3B%0A%20%20%20this.tooltipText%20%3D%20self.label%20+%20%22%5Cn%u041B%3A%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043C%u0435%u043D%u044E%20%u043A%u043D%u043E%u043F%u043A%u0438%5Cn%u041F%3A%20CB%20%u043C%u0435%u043D%u044E%5Cn%5Cn%u041F%u0430%u043F%u043A%u0430%20%u0434%u043B%u044F%20%u044D%u043A%u0441%u043F%u043E%u0440%u0442%u0430%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%2C%20%u0431%u0435%u0437%20%u0437%u0430%u043F%u0440%u043E%u0441%u0430%3A%5Cn%22%20+%20path%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%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
Отсутствует
Вот заготовка, только иконки замены на свои
Всё отлично работает, кроме: "Открыть папку для экспорта закладок"
В консоли всё чисто.
Отредактировано unter_officer (28-07-2017 22:28:12)
«The Truth Is Out There»
Отсутствует