Есть у меня такой способ бэкапа текущего профиля, причем, можно бэкапить прямо во время работы браузера.
Для работы требуются:
Файлы - 7z.dll и 7z.exe из архиватора 7-zip любой версии и разрядности (естественно лучше взять x32)
Батники - "_list-folder.bat"
и "_profbak.bat"
@echo off For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set DateTime=%%i set "FOX_BACKUP=_ff_backup_%DateTime:~2,2%.%DateTime:~4,2%.%DateTime:~6,2%_%DateTime:~8,2%-%DateTime:~10,2%" rem файлы _include.txt, 7z.exe и 7z.dll должны быть рядом rem _list-folder.bat создает _include.txt с листингом папки 7z.exe u -tzip -mx9 -ssw -spf -scsWIN -r0 -i@_include.txt ..\%FOX_BACKUP%.zip
Кидаем весь этот зоопарк в профиль выгруженного браузера.
Запускаем "_list-folder.bat" он создает рядом с собой "_include.txt" - текстовый файл со списком всех папок и файлов профиля. Редактируем, если надо, "_include.txt", желательно удалить из списка "parent.lock", так как вызывает не критическую ошибку.
Запускаем браузер.
Создаем кнопку -
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%u0411%u044D%u043A%u0430%u043F%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA51AAAOdQG5Y1EyAAAAhklEQVQ4y6WT0QnAIAxE78Bt2v1cod3PznP9kVLTRKUGBD+Sd5eQUBJWggCWCAkAJPGXOqlUPyVKkrSPQIoCQJGE6AF4HFyGuBmrR3cGQX8Wmp2cL8Cqv5JPD5Zm1D0nFZjTjHpQ7DuI1L3iBjBS9/pvhtjr21OukVkXiX/ug6SWj4mr53wDMz1vldHlLJkAAAAASUVORK5CYII%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%5B/*CODE*/%0Avar%20file%20%3D%20Services.dirsvc.get%28%27ProfD%27%2C%20Ci.nsIFile%29%3B%0Afile.append%28%22_profbak.bat%22%29%3B%0Afile.launch%28%29%3B%20%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
Поучаем возможность бэкапить все файлы-папки профиля, перечисленные в файле "_include.txt", прямо во время работы браузера.
Бэкапы создаются рядом с папкой профиля и имеют имя формата "_ff_backup_дата_время", пример: "_ff_backup_16.10.07_00-57". Формат даты не зависит от системных настроек и жестко задан в батнике. В "_include.txt" можно оставить только действительно нужное, а остальное удалить.
Как бы все это отвязать от файлов в профиле и сделать кнопку с возможностью указания пути к архиватору, но не привязанную к системному пути профиля браузера? Что бы можно было использовать с портативками.
Получение пути профиля, получение списка файлов-папок профиля (можно в справку, для возможности редактирования), путь архиватора, запуск ком.строки, вставка параметров, Enter. Сможет кто ни будь реализовать?
Отсутствует
var links = "http://nnmclub.to/?q="+convertFromUnicode("UTF-8",getSelect())+"&w=title"; gBrowser.addTab(links); function getSelect() { var clip = gClipboard.read(); gClipboard.write(""); window.content.focus(); goDoCommand("cmd_copy"); var sel = gClipboard.read(); clip && gClipboard.write(clip); return (sel == '') ? " " : sel.toString().replace(/^\s+|\s+$/g,""); };
А в какой кодировке текст на этот сайт передавать?
Отсутствует
А в какой кодировке текст на этот сайт передавать?
Со страничкой сайта надо общаться в той кодировке, которую она сама использует. В случае http://nnmclub.to/ это "windows-1251".
Отредактировано yup (13-10-2016 15:11:21)
Отсутствует
А можно взглянуть на весь код, передающий запрос на сайт?
function searchInWebsite( ) { var text = escape( convertFromUnicode("windows-1251", getSelect()) ); var url = content.document.domain; var url = encodeURIComponent( url ); var url = "http://nnmclub.to/?q=" + text + "&w=title"; gBrowser.addTab( url ); };
А во, вот так работает, из кнопки - поиск по сайту.
var links = "http://nnmclub.to/?q="+convertFromUnicode("windows-1251",getSelect())+"&w=title"; gBrowser.addTab(links);
А пробовал так.
Отсутствует
У меня по нажатию на кнопку создается таймер
И получается, если нажать кнопку пока этот таймер тикает, создается еще один таймер с этим же идентификатором. И первый уже остановить невозможно.
Как сделать, чтобы не создавались дополнительные таймеры пока первый работает?
Отредактировано toxa (13-10-2016 18:06:55)
Отсутствует
fokanik
У меня выполнение из кнопки строки
показывает
а это никак не ANSI-1251. Если точнее, это безумная (в духе начала 90-х годов) транслитерация в западноевропейские буквы.
Отредактировано yup (13-10-2016 18:09:34)
Отсутствует
fokanik
у меня работает.
var text = escape( convertFromUnicode("UTF-8", getSelect()) ); var url = "http://nnmclub.to/?q=" + text + "&w=title"; gBrowser.addTab(url); function getSelect() { var clip = gClipboard.read(); gClipboard.write(""); window.content.focus(); goDoCommand("cmd_copy"); var sel = gClipboard.read(); clip && gClipboard.write(clip); return (sel == '') ? " " : sel.toString().replace(/^\s+|\s+$/g,""); };
Отсутствует
bunda1
Пробую вручную конструировать запрос поиска по слову "Геометрия".
Если передавать в UTF-8 -
- не находит ничего.
Если передавать в ANSI-1251 -
- вываливает кучу найденных раздач
Отсутствует
yup, bunda1 - спасибо, работает
var zapros = getSelect(); gBrowser.addTab("http://free-rutor.org/search/" + escape(convertFromUnicode("UTF-8", zapros)) + ""); gBrowser.addTab("http://nnmclub.to/?q=" + escape(convertFromUnicode("windows-1251", zapros)) + "&w=title"); gBrowser.addTab("http://riperam.org/search.php?keywords=" + escape(convertFromUnicode("UTF-8", zapros)) + "&sr=topics&sf=titleonly&fp=1&tracker_search=torrent#sr"); function getSelect() { var clip = gClipboard.read(); gClipboard.write(""); window.content.focus(); goDoCommand("cmd_copy"); var sel = gClipboard.read(); clip && gClipboard.write(clip); return (sel == '') ? " " : sel.toString().replace(/^\s+|\s+$/g,""); };
Отредактировано fokanik (13-10-2016 18:57:51)
Отсутствует
bunda1
Пробую вручную конструировать запрос поиска по слову "Геометрия".
Но у меня код ищет не слово "Геометрия" а getSelect(), то есть выделенный текст из страницы у которого уже есть своя кодировка. Так работает без перекодировки:
var url = "http://nnmclub.to/?q=" + getSelect() + "&w=title"; gBrowser.addTab(url); function getSelect() { var clip = gClipboard.read(); gClipboard.write(""); window.content.focus(); goDoCommand("cmd_copy"); var sel = gClipboard.read(); clip && gClipboard.write(clip); return (sel == '') ? " " : sel.toString().replace(/^\s+|\s+$/g,""); };
Отсутствует
Но у меня код ищет не слово "Геометрия" а getSelect(), то есть выделенный текст из страницы у которого уже есть своя кодировка.
А разве gClipboard.read() возвращает текст в кодировке страницы а не во внутреннем представлении Javascript?
Кстати, откуда в Custom Buttons берётся функция convertFromUnicode с двумя параметрами? В стандартном Javascript её нет (и при вызове её из консоли отладчика, соответственно, получаем ругань), а у функции из nsIScriptableUnicodeConverter параметр только один?
Отсутствует
Кстати, откуда в Custom Buttons берётся функция convertFromUnicode с двумя параметрами?
Из window.
А разве gClipboard.read() возвращает текст в кодировке страницы а не во внутреннем представлении Javascript?
получается так.
Отсутствует
bunda1
Вот из этой картинки как раз и видно, что у функции из nsIScriptableUnicodeConverter параметр только один, а функция с двумя параметрами является обёрткой для него.
Но из CB эта обёртка вызывается, а из консоли - нет. Почему так?
Отсутствует
Ну а с моим вопросом по таймеру как?
https://forum.mozilla-russia.org/viewtopic.php?pid=724576#p724576
if ( self.interval ) { alert('stop'); return; } self.interval = setInterval(()=> { custombuttons.alertSlide("alert", "2000"); clearInterval(self.interval); delete self.interval; }, 2000);
или
if ( self.interval ) { clearInterval( self.interval ); delete self.interval; return; } self.interval = setInterval(function() { custombuttons.alertSlide("alert", "700"); Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager) .minimizeMemoryUsage(null); }, 12000 );
Отсутствует
yup пишетА разве gClipboard.read() возвращает текст в кодировке страницы а не во внутреннем представлении Javascript?
получается так.
Засовываю в кнопку код
Захожу на nnmclub.to, выделяю там кусочек русского текста, жму кнопку. Выскакивает окошко с выделенным мной текстом. А ведь в Javascript внутреннее представление текста только одно - UTF-16, и если бы gClipboard.read() возвращала текст в кодировке страницы (ANSI-1251), то я должен был бы увидеть белиберду.
А дальше запускаю системную утилиту просмотра содержимого буфера обмена и вижу, что при копировании любого текста в браузере он помещается в буфер сразу в трёх форматах: OEM, ANSI и Unicode. Из чего следуют два вывода:
1. При чтении текста из буфера обмена неизвестно, в какой кодировке этот текст был изначально.
2. Функции чтения текста из буфера никакого смысла заморачиваться с левыми (для Javascript) кодировками, если оттуда можно сразу взять готовый Уникод.
Отсутствует
Подскажите пожалуйста, как отредактировать кнопку для сайта (код), которую создаёт вот эта кнопка https://forum.mozilla-russia.org/viewtopic.php?pid=624291#p624291, чтобы сайт открывался не в новой закладке а в боковой панели?
Или может кто подскажет код кнопки для открытия определённого сайта в боковой панели?
Отредактировано Владимир Болотников (16-10-2016 21:28:39)
Отсутствует
Или может кто подскажет код кнопки для открытия определённого сайта в боковой панели?
Отсутствует
bunda1
Спасибо большое
Отсутствует
voqabuhe
Эта кнопка не работает как описано, левая кнопка мыши (ЛКМ) не выводит ничего и поэтому сайты сохранить в список не возможно. У меня портативка 49.0.1
Ещё вопросик если можно, а Custom Buttons понимает относительные пути до папки с профилем, если например сделать htm и положить его в папку с профиле и показывать по кнопке в боковой панели.
Или в кнопке нужно обязательно прописывать абсолютный путь типа: "file:///D:/FirefoxPortable/myprofile/main.htm"
Отредактировано Владимир Болотников (17-10-2016 11:04:01)
Отсутствует
Спасибо bunda1 за помощь с таймером. Я сделал, все работает.
Ну а если все же получилось, что создались два таймера с одинаковым идентификатором и к одному из них вроде как нет доступа, как можно его удалить или остановить? Чтоб без перезапуска браузера?
Отсутствует