Уважаемые форумчане, кто сталкивался с такой проблемой:
После обновления firefox до 45–й версии, стало невозможно добавить свой поисковый плагин. При добавлении xml файла в папку searchplugins, он в firefox не отображается, а устанавливаемые с некоторых сайтов их поисковые плагины, ставятся неизвестно куда, а не в searchplugins, как раньше. Через http://mycroftproject.com/ плагины ставятся, но, опять таки, найти их в каких–либо папках невозможно, да и не всегда целесообразно публиковать какие–то узкоспециализированные плагины.
Возможно ли теперь добавление своего плагина и, если — да, то как? Кто какие видит пути решения данного вопроса? Заранее благодарен за ответ.

В search.json они теперь ставятся. Если какой-то из новых плагинов в search.json или из старых, в папке searchplugins, не добавился/обновился после редактирования, то удалите, при закрытом браузере, файл search.json.mozlz4 (это что-то вроде кэша поисковых плагинов).

turbot
Папки searchplugins вообще не существует в последних версиях. Если удалить файл search.json.mozlz4 то удалятся все установленные поиски.

Mozillafan
Поисковые плагины добавляются в файл search.json.mozlz4. Те сайты которые не предлагают добавить свой поиск, можно добавить дополнением Add to Search Bar.
Перемещаются и удаляются поиски в настройках на вкладке поиск.

oleg.sgh пишет

Папки searchplugins вообще не существует в последних версиях.

Но старые, если были, подхватываются и переносятся в search.json. И я настаиваю, что хранятся они именно в нем, а search.json.mozlz4 - кэш 1203167 – Store user-installed search plugins in a JSON file and stop loading [profile]/searchplugins/*.xml

02-05-2016 18:51:54
Черт, наоборот. Невнимательно читал. search.json - кэш, а хранятся в search.json.mozlz4. :dumb:

Mozillafan
Search Engine Creator

turbot пишет

В search.json они теперь ставятся. Если какой-то из новых плагинов в search.json или из старых, в папке searchplugins, не добавился/обновился после редактирования, то удалите, при закрытом браузере, файл search.json.mozlz4 (это что-то вроде кэша поисковых плагинов).

Спасибо за ответ, и можно поподробнее о технологии, а то в этом search.json одна бесконечная "макаронина" и что там куда добавлять не совсем понятно, а search.json.mozlz4 — вообще "китайская грамота" с непонятными символами.

turbot
Да, но если удалить search.json.mozlz4 то поисковики вряд ли восстановятся из папки searchplugins. Скорее всего, нужно будет откатить до 44-й и опять обновить.
Я не настаиваю но в моем новом профиле  файла search.json нет.

скрытый текст
b-6983.png

Mozillafan
Если вручную, то я попрежнему создаю xml-ки в папке searchplugins. Они подхватываются и добавляются, как я говорил. Отредактированные в нем - также подхватываются с изменениями. А вот отредактировать установленные через плюсик в поисковой строке, либо аддонами - сам пока не знаю. search.json - обычный файл json - отредактировать его не проблема, но, раз это только кэш, бессмысленно. Редактировать надо search.json.mozlz4. Сейчас погуглю, что за зверь mozlz4.

02-05-2016 19:09:43
oleg.sgh
Да-да, я там поправился:

search.json - кэш, а хранятся в search.json.mozlz4.

Был не прав. А вот почему у вас кэш не создается - не знаю. Может, только при наличии поисковиков в searchplugins создается? И да, вы правы, если удалить search.json.mozlz4 - то удалятся поисковики. Но только те, что уже в него добавлены были. Из searchplugins - заново подхватятся. Проверено.

turbot

Может, только при наличии поисковиков в searchplugins создается?

Может. В новых профилях новых версий этой папки вообще нет и  вряд ли стоит сейчас делать на этой папке акцент. Перенос своих поисковиков, из профиля в профиль, производится переносом файла search.json.mozlz4. Проверено...методом  тыка )
Моя эпопея с поисками

Jerome пишет

Спасибо, но, судя по картинке, с помощью него можно сделать плагин только для GET–запросов, да и я как–то привык видеть, что я в свою мозиллу "сую". Некоторые сайты добавляют вместе с плагинами посторонний код, который как–бы ничему и не вредит, но и на поиск никак не влияет, а искать его потом и удалять вручную у меня большого желания нет (тем более, что где его искать, я пока до конца не разобрался).

Что-то я запутался вот тут говорится, что search.json.mozlz4 - кэш:

It saves the cache file to search.json.mozlz4

Файл, судя по всему LZ4 алгоритмом пожатый json, но что-то у меня он не распаковывается. Видимо, какая-то их собственная имплементация:

This file format is in fact just plain LZ4 data with a custom header (magic number [8 bytes] and uncompressed file size [4 bytes, little endian])

Нарыл только скрипт для питона. Оттуда и цитата.

02-05-2016 19:28:01
Mozillafan
Я ж говорю - создавайте по старинке, в xml. Они подхватываются и импортируются то ли в search.json.mozlz4, то ли в search.json. Пока, покрайней мере

Да в том то и дело, что ничего уже ниоткуда не подхватывается и никуда не импортируется, иначе зачем бы я открывал эту тему.

Mozillafan
У меня даже на ночнушке 49-ой подхватывает. Может битые файлы search.json.mozlz4, search.json и search-metadata.json. Попробуйте их удалить (бекапы делать не забываем) при закрытом браузере и запустить. Все должно подхватить.

Спасибо, помогло, но лишь частично. После удаления search.json, search.json.mozlz4 и search-metadata.json действительно подхватываются плагины из папки searchplugins, мало того, появляются даже те плагины, которые стояли в браузере по умолчанию, но впоследствии были удалены вручную, причём файл search.json.mozlz4 автоматически восстанавливается, остальные два — нет. Но, при повторной попытке добавить xml в searchplugins — та же история, из–за которой собственно и возникла эта тема, т. е. чтобы добавить свой поисковый плагин, надо предварительно удалить файл search.json.mozlz4, иначе никак. В общем, крайне неудобно, каждый раз приходится чистить браузер от ненужных поисковиков. Откатываюсь к 43–й версии, там всё просто, понятно и удобно.

Mozillafan
Хм, сейчас проверил - вы правы. У меня не так давно, где-то на 47-ой ночнушке еще обновлялись при редактировании/добавлялись. Что-то поменяли. :(
Значит, надо искать декомпрессор/компрессор для mozlz4. Питон что-то ставить неохота, а больше ничего не нагуглил...
А может кто аддон под редактирование плагинов напишет, дело-то востребованное.

1. Set devtools.chrome.enabled to true in about:config
1. Open the browser console. (Tools -> Web Developer -> Browser Console)
2. Run Services.search.addEngine("file:///Users/.../opensearch.xml", null, null, false);

(For the file URL, you can copy what appeared in the URL bar after you used the "File -> Open File" menu item)

1236498 – Unable to replace user added search engine icon by editing search.json(.mozlz4) or xml file

hajikodenuro
Ага, спасибо.

Вот еще нашел как распаковать, код для Cusstom Buttons, во вкладку код:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's 'mozLz4' format", "*.jsonlz4; *.mozlz4");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    var oldFile = fp.file.path;
    var newFile = oldFile.replace( ".mozlz4", ".json" || ".jsonlz4", ".json" );
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    function decompress(oFilePath,nFilePath){
      return Task.spawn(function* () {
        var jsonString = yield OS.File.read(oFilePath,{ compression: "lz4" });
        yield OS.File.writeAtomic(nFilePath, jsonString);
      })
    }
    decompress(oldFile,newFile);
  }
}

- после выбора файла, распакованный .json сохраняется в ту же папку. Осталось только прикрутить обратную запаковку. Ковыряю пока.

Сделал. Во вкладку "код". По нажатию, в окне проводника выбираете файл с расширением jsonlz4/mozlz4/json, и запакованный/распакованный файл пишется в ту же директорию. Существующий файл с таким же именем и расширением будет перезаписан без подтверждения.

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString,{ compression: "lz4" });
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = oldFile.replace( ".mozlz4", ".json" || ".jsonlz4", ".json" );
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath,{ compression: "lz4" });
          yield OS.File.writeAtomic(nFilePath, jsonString);
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

03-05-2016 19:33:42
Еще бы распакованный json файл форматировать в удобочитаемый вид, как это делает в скратчпаде кнопка "prety print" и обратно... Но не потяну.

Мож, Dumby сюда заглянет? :rolleyes:

turbot пишет

Еще бы распакованный json файл форматировать в удобочитаемый вид, как это делает в скратчпаде кнопка "prety print" делает и обратно... Но не потяну.

Код форматирования JSON можно позаимствовать из JSONovich

Много кода. Да еще addon sdk... Я там до второго пришествия ковыряться буду, с моими-то познаниями. Уж проще из devtools прикрутить. Но я и это не осилю. :dumb:

А чем всех не устраивает Add to Search Bar?

voqabuhe
Всем устраивает. Только его новая версия также пишет сразу в search.json.mozlz4 и отредактировать добавленный поиск также становится проблематично.

turbot
Удалить и добавить снова с нужным названием.
Никак не могу понять необходимости редактировать поиск именно редакцией файла в профиле.
Или под редактированием подразумевается еще что то?

oleg.sgh пишет

Удалить и добавить снова с нужным названием.

При чем тут название? Поменять параметры запроса можно только редактированием.

turbot пишет

Много кода.

Насколько я понял при беглом просмотре, собственно форматирование там - 8-килобайтный json2html.js, а всё остальное - разборки с серверами, откуда данные берутся, и настройки.
В вашем же случае превращать надо даже не в HTML, а в простой текст, так что: JSON.parse() и проход (рекурсивный) по получившемуся массиву с дописыванием в начало очередной посещённой строки нужного количества пробелов.

yup
Ммм, потыкаюсь. Спасибо.

скрытый текст
Но вы неверно оцениваете мои познания.

yup пишет

так что: JSON.parse() и проход (рекурсивный) по получившемуся массиву с дописыванием в начало очередной посещённой строки нужного количества пробелов.

- мне мало о чем говорит. :) Теорию учить лень. Так - методом тыка и гугления/подглядыванием в чужое кой-чего нахватался. :)

turbot пишет

Но вы неверно оцениваете мои познания.

Ладно, сейчас оторвусь от той хрени, которую ваяю, и сделаю перевод из строки JSON в форматированный текст. Но в свой код это потом сами вставите.

yup
Да я ж, не прошу. Я пока в ресурсах devtools ковыряюсь, на предмет как там сделано. Может и сам одолею. :)

После небольшого изучения матчасти всё оказалось примитивно просто:
если в str содержится исходная JSON-последовательность, то двойная конвертация

Выделить код

Код:

str = JSON.stringify(JSON.parse(str), null, '  ');

даст на выходе строку с отформатированным текстом.

P.S.  Вот только приведённые вами коды для кнопки (что первый, что второй) у меня ничего не сохраняют - ни в Firefox, ни в Seamonkey. (Но и в консоли никакой ругани не появляется.)

yup пишет

Вот только приведённые вами коды для кнопки (что первый, что второй) у меня ничего не сохраняют - ни в Firefox, ни в Seamonkey. (Но и в консоли никакой ругани не появляется.)

Странно. Проверил еще на 38 - работает.

даст на выходе строку с отформатированным текстом.

Ага, спасибо. Попробую присобачить.

turbot пишет

Проверил еще на 38 - работает.

У меня Seamonkey 2.40 и Firefox 45.0.2, Custom Buttons 0.0.5.8.9.
В обоих браузерах после выбора сжатого файла одинаково ничего не происходит.

yup
Ошибся - не работает. Наверное, потому что Atomics - JavaScript с 46-ой фф только поддерживается.

Не туда смотрю.:dumb: Нет, вроде не в этом дело.

03-05-2016 22:55:40
yup
Это все моя самодеятельность виной. Так - работает:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString,{ compression: "lz4" });
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath,{ compression: "lz4" });
          yield OS.File.writeAtomic(nFilePath, jsonString);
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

На [firefox] 34+ точно должно работать. Проверил. Странно, что ночнушка мою ошибку переваривала и не давилась.

Я с CB и созданием своих дополнений дела никогда не имел. Как там вообще отлаживаться? Как хотя бы в консоль что-то вывести? У меня из кода кнопки console.log() ничего никуда не пишет.

yup
Я тоже не знаток :D, но например

Выделить код

Код:

LOG("Saved as: " + newFile);

А у меня это не работает.
Вот прямо сейчас вписал в код кнопки первой строкой:

Выделить код

Код:

LOG('1');

Результат: распакованный файл на диске создаётся, а в консоли тишина.

И JSON в кнопке почему-то не работает.
Та пара команд, которую выше написал, в коде, вписанном в тестовый HTML, работает, в консоли работает, а вписываю в кнопку - и распакованный файл не создаётся.
Причём достаточно даже абстрактного обращения, не затрагивающего выводимый текст.
Например, даже строчка: "var zzz = JSON.parse(jsonString);" - уже всё убивает.

yup пишет

А у меня это не работает.

thumb2.png  idontnow.gif

yup пишет

И JSON в кнопке почему-то не работает.

А вот тут точно ничего не могу сказать. :)

Понял. Я смотрел консоль отладчика (и встроенного, и Firebug). Был уверен, что в окошко "Консоль браузера" то же самое выводится.

Сейчас на часик примерно отвлекусь, а потом попробую разобраться, почему JSON хулиганит. Мысль некоторая есть.

Меня обмануло название переменной (jsonString). Оказалось, что OS.File.read() возвращает не строку, а массив байтов, который ещё нужно превратить в строку, прежде чем скармливать JSON.parse().
Теперь рабочий код выглядит так:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString,{ compression: "lz4" });
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = new TextDecoder("utf-8").decode(yield OS.File.read(oFilePath,{ compression: "lz4" }));
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '));
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

yup
Шикарно! Спасибо. :beer:

Я смотрю, обратно в строку нет необходимости переводить? И так пережевывает. Правда, search.json.mozlz4 на пару КБ в размере вырастает. :)
Хм, после перезапуска браузера, снова уменьшился. Автоматом оптимизируется? :rolleyes:

turbot пишет

Правда, search.json.mozlz4 на пару КБ в размере вырастает.

Это потому, что сжимается наш форматированный текст - со всеми добавленными туда пробелами и переносами строк.

turbot пишет

Хм, после перезапуска браузера, снова уменьшился. Автоматом оптимизируется?

Может быть. У меня search.json при перезапусках не меняется (и дата у него на два месяца более ранняя, чем у search.json.mozlz4).
Но если заглянуть в search.json.mozlz4, то там почти в самом начале будет видна последовательность {"version":1
Если между фигурной скобкой и кавычкой пробелов нет - значит, браузер всё опять в одну строку перевёл ("оптимизировал").

yup пишет

Это потому, что сжимается наш форматированный текст - со всеми добавленными туда пробелами и переносами строк.

Ну да, я понял. :)

Если между фигурной скобкой и кавычкой пробелов нет - значит, браузер всё опять в одну строку перевёл ("оптимизировал").

Не подумал открыть посмотреть. Так и есть.

Еще раз спасибо за помощь. Гораздо удобнее и быстрее, чем в скратчпад вставлять.

Нашёл описание нововведений в функции read и writeAtomic. (Хм, два года уже им.)
Теперь можно сразу заказать чтение не в массив, а в строку, и обойтись без TextDecoder:

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString, {compression: "lz4"});
        })
      }
      compress(oldFile,newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath, {encoding: "utf-8", compression: "lz4"});
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '), {encoding: "utf-8"});
        })
      }
      decompress(oldFile,newFile);
    }
  }
};

turbot
yup
Полезная кнопка оказалась!

А можно ли открывать диалог Open File уже в папке профиля (прописать относительный путь к папке %ПРОФИЛЯ%)

thrower
Можно. Но у меня не выходит. Может кто заглянет, знающий. :)

turbot пишет

Можно. Но у меня не выходит.

Где-нибудь между первой строкой кода и вызовом функции fp.show() нужно добавить строку

Выделить код

Код:

fp.displayDirectory = FileUtils.getDir("ProfD", []);

Теоретически, перед ней ещё нужно иметь

Выделить код

Код:

Components.utils.import("resource://gre/modules/FileUtils.jsm");

но у меня почему-то и без этого работает.

yup
Чорт, почти ведь до этого сам дошел! Только параметры неверно задал. :D Спасибо.

Спасибо.
Теперь удобно.

Что-то у меня  только окно открытия появляется, а после команды открыть - ничего не происходит.

voqabuhe
Распакаванные/запакованные файлы сохраняются втихую в ту же директорию, без подтверждения. Добавьте LOG и смотрите в консоли, если сомневаетесь:

скрытый текст

Выделить код

Код:

var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
fp.displayDirectory = FileUtils.getDir("ProfD", []);
fp.init(window, "Open File", Components.interfaces.nsIFilePicker.modeOpen);
fp.appendFilter("Mozilla's Lz4 and json files format", "*.jsonlz4; *.mozlz4; *.json");
if (fp.show() == Components.interfaces.nsIFilePicker.returnOK) {
  var file = fp.file;
  if (file.exists() && file.isFile() && file.isReadable()) {
    Components.utils.import("resource://gre/modules/Task.jsm");
    Components.utils.import("resource://gre/modules/osfile.jsm");
    var oldFile = fp.file.path;
    if (oldFile.endsWith(".json")) {
      var newFile = oldFile.replace(/(\.json)$/, ".mozlz4");
      function compress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath);
          yield OS.File.writeAtomic(nFilePath, jsonString, {compression: "lz4"});
        })
      }
      compress(oldFile,newFile);
      LOG("Saved as: " + newFile);
    }
    else {
      var newFile = (oldFile.replace(".mozlz4", ".json") || oldFile.replace(".jsonlz4", ".json"));
      function decompress(oFilePath,nFilePath){
        return Task.spawn(function* () {
          var jsonString = yield OS.File.read(oFilePath, {encoding: "utf-8", compression: "lz4"});
          yield OS.File.writeAtomic(nFilePath, JSON.stringify(JSON.parse(jsonString), null, '  '), {encoding: "utf-8"});
        })
      }
      decompress(oldFile,newFile);
      LOG("Saved as: " + newFile);
    }
  }
};

turbot пишет

Распакаванные/запакованные файлы сохраняются втихую в ту же директорию, без подтверждения. Добавьте LOG и смотрите в консоли, если сомневаетесь:

Да я ни в чём не сомневаюсь пока, я просто не пойму что кнопка делает?:) Написало что Saved as: C:\......\search.mozlz4 и чё мне это даёт? :dumb:

voqabuhe
А что вам нужно? Просто потыкать кнопку? Ну так тыкается ж. А если б знали, что нужно от этой кнопки, то то и знали бы, что она делает.

turbot пишет

Ну так тыкается ж.

А, спасибо. Теперь сразу стало всё ясно.:)

А если б знали, что нужно от этой кнопки

Вот и хотел узнать..., ну да ладно.

voqabuhe
Ну неужели сложно прочитать две страницы темы? Да и название намекает.

turbot
Спрашивал я как поменять иконку на Гугле, вы мне эту кнопку посоветовали. Теперь буду помощи просить.
Распаковываю, появляется search.json.json, открываю и меняю код иконки на свой. Запускаю браузер и ничего не поменялось. Понимаю что надо запаковать обратно, а вот как это сделать не понимаю. Прочитал две страницы так и не дошло.

Mishania
Точно также: нажать кнопку, выбрать отредактированный search.json.json и он запакуется обратно в search.json.mozlz4

turbot
Точно! Смутила кнопка открыть. Спасибо, всё прекрасно поменялось. Вот у меня риторический вопрос, нафига там удалённые мной прайслист и маилру???? Беда с ними.

Mishania
Ах, да, браузер перезапустить еще надо после обратной упаковки, чтоб применились изменения.

Все эти манипуляции по добавлению поисковиков касаются ранних версий? Для 46-й и выше как добавлять?

"Все эти манипуляции" как раз и вызваны изменениями в 46-ой и выше. Добавлять-то можно как и раньше - аддонами (Add to Search Bar), либо появившимся плюсиком в попапе поисковой строки, а вот отредактировать добавленное - только с помощью этих танцев с cb кнопкой.

а как удалить те плагины что туда заботливые годзилы прописали, дефолтные. только не через ту кнопочку  а конкретно ?

Kero пишет

а как удалить те плагины

в настройках firefox

мусьё, а не проще, вместо бубна гонять расширение "URL Alias"? псевдонимы для поисковых машин, псевдонимы для сайтов и др.
или это уже дело принципа? победить и распилить сжатый файл? :)
в итоге то: декомпресс, корректировка, компресс, перезапуск ff. как-то неоптимизированно.

юзая расширение, не будет лишних тегов, кодированных пикч в base64. будет 1 окно и на 1 строчку - 1 значение.

Описано по шагам как добавить свой поисковой движок через xml в Firefox вручную: https://github.com/myBestSoftAndPref/so … top.md#faq

14-10-2016 17:55:48
unware
Зачем? Достаточно всегда таскать с собой каталог с плагинами searchplugins. После перезапуска и удаления search.json.mozlz4 они всегда будут передобавляться. Надо скоректировать? Скориктировал xml, удлил search.json.mozlz4 и всё обновилось. Не так уж часто корректировать приходится.

Dorian
Спасибо за ссылку.
Раньше, собственно, так и делал. Сейчас пересел на расширение. Из-за простоты и функциональности. Во-1, можно делать не только поисковые url (?q=%s и пр.), а так же псевдонимы для сайтов. Для заглавной страницы, например. Во-2, кому нужно, могут делать более сложные формы для поиска. Два и более вложений в разных частях url (%1, %2, ...). В-3, скорость добавления и редактирования. На каждый поисковый плагин не нужен новый xml. А как быть, если понадобится добавить-отредактировать более 5 поисковых машин? Гонять по окнам или вкладкам текстового редактора, попутно плодя шапку и перезагружая браузер? Не очень привлекает.
Имхо, наличие пиктограмм не играет роли.

Если вы беспокоитесь об интеграции ваших настроек в другие фаерфоксы, все созданные запросы с помощью расширения всегда можно взять в папке профиля - в prefs.js. И скормить юнцу через user.js :)

Да, и конечно же, у такой реализации есть существенный минус. Тот факт, что это аддон. А если будет отсутствовать поддержка актуальных версий ff, подписи, расширение просто не заведется (не будем делать акцент на ночнушках, хаках, небрендированных сборках). И, как следствие, ваш способ окажется живучее.

Del.

Jerome пишет

Не работает с кириллицей. Есть ли альтернативы?

09-03-2017 12:24:01

Dorian пишет

Надо скоректировать? Скориктировал xml, удлил search.json.mozlz4 и всё обновилось. Не так уж часто корректировать приходится.

После удаления search.json.mozlz4 все кейворды исчезают. У меня сейчас 50+ наименований. Менять такое количество после каждого обновления — ужас.

Не нашли ещё способ защитить файл  search.json.mozlz4 при обновлении браузера? Хоть и не часто, но приходится распаковывать, менять иконки на свои, привычные и сохранять опять.

Отказал поиск на сайте кинопоиск. Вернее, в поисковой панели работает но не работает в дополнениях поиска [firefox] 57+
Например Selection Context Search
Если совсем точно, то он ищет цифры и латиницу но кириллицу подставляет в поиск в другой кодировке или сайт ее меняет, не знаю...
Сам поисковый адрес

Выделить код

Код:

https://www.kinopoisk.ru/search/?query=

Можно заставить его искать русский текст?

oleg.sgh пишет

одставляет в поиск в другой кодировке или сайт ее меняет

дополнение не энкодит запрос? попробуйте другие

nexterr

попробуйте другие

Пробовал другие...и подобное в хромоклоне начало вести себя так же...даже в убунту, для очистки совести.
Кстати, поисковая закладка находит русские запросы из адресной строки.

---

nexterr
Да, пробовал и этот вариант, без разницы.
В поисковой панели, поиск с кодировкой windows-1251. Если поменять на UTF-8, то он начинает так же себя вести.
Вот я и подумал, может можно как то в адресе поиска указать кодировку.

Еще одна проблема, только наоборот. Дополнения делают поиск а из поисковой панели, открывает просто сайт. Здесь были изменения на сайте.
Кусок кода из файла search.json.mozlz4

скрытый текст

Выделить код

Код:

{
      "_name": "Filmix",
      "_shortName": "rjwyjrnxbm",
      "_loadPath": "[other]addEngineWithDetails",
      "description": "filmix",
      "__searchForm": "https://filmix.me",
      "_iconURL": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABlklEQVQ4jZWT30rCUADG9yo+QRlTd6jXSArKXei2eoIu6iKKJJAo+mNJEUQRQQT1CkJgTaQtluF/kWqh0znSC1G+Lip1WWtd/C6/3+Gc832UHnA7DIFEDYG0DYHAJm1DIFE94HZQn2EYAkFdIKjOjEHfm8fbZQRvV/sD6KFZ1HuiKGXwvZPLwigaiohOp/MrlYsIqhzzIeBJm/oK6zzB6/YcWq2WJep5GNqXQCDoCqocg5ezLTSaTTSaTSgHq7j2jiA2PtTl1juMrI9Gjf9BoHEMSqeb0OsG9LqB+ykXygEPNI4x0R8eEBSPN1CuaChXNKSn6YHwn4Lc0RqenlVrTtZ/v0L6MIRCsWRJ5jD08yNqHIPH/VWkMjmkMjnEdlYghoMm4rtBPC74et/4XfAQCUJJpqAkU5AmnMiztIkC64Lq9/QXySy4Dy9DkhVIsoI8S9uqtUkgbS8hnpART8j/EHxWWeMY3G0t4kZM4EZMoMC6bI2qO6YazyDro3HrHYY06YTq99gRRKn+Odf4j7JUOcb0UFZzfgcbeczTLd38UwAAAABJRU5ErkJggg==",
      "_metaData": {
        "alias": null,
        "order": 3
      },
      "_urls": [
        {
          "template": "https://filmix.me/",
          "rels": [],
          "resultDomain": "filmix.me",
          "params": [
            {
              "name": "scf",
              "value": "fx"
            },
            {
              "name": "story",
              "value": "{searchTerms}"
            },
            {
              "name": "search_start",
              "value": "0"
            },
            {
              "name": "do",
              "value": "search"
            },
            {
              "name": "subaction",
              "value": "search"
            },
            {
              "name": "sort_name",
              "value": ""
            },
            {
              "name": "sort_date",
              "value": ""
            },
            {
              "name": "sort_favorite",
              "value": ""
            }
          ]
        }
      ],
      "queryCharset": "UTF-8",
      "_readOnly": false
    }


Можно заставить его искать снова?

oleg.sgh
что бы искать на Filmix надо делать специальный запрос, просто запрос  в адресной строке не прокатит

nexterr
Не из адресной а из панели поиска.

oleg.sgh

oleg.sgh пишет

а из панели поиска

браузера?
они недавно поиск поменяли просто гетить не получится, поиск возможен только с сайта или писать дополнение )

nexterr
Поисковая панель в браузере. Что их писать, когда они есть и ищут с помощью - https://filmix.me/search/
Я знаю что поменяли, поэтому и спрашиваю есть ли возможность скорректировать сам поисковый плагин.

для кинопоиска знкодить в кодировке windows-1251:

скрытый текст
https://www.kinopoisk.ru/index.php?kp_query=%EE%EE%EE%EE  поиск: оооо

oleg.sgh пишет

скорректировать сам поисковый плагин

не представляю как он работает, если там такая есть возможность - для поиска нужны куки с сайта, делать get запрос с нужным заголовком и телом

nexterr

для кинопоиска знкодить

Не, не работает.

oleg.sgh пишет

Не, не работает.

что значит не работает? я вам пример рабочей ссылки дал
пишите разработчикам )

nexterr
То и значит. Если выбрать текст кириллицей то в поисковой строке кинопоиска, будет не запрос а абракадабра.
Каким разработчикам писать если это в нескольких дополнениях и в хромоклоне
https://cloud.mail.ru/public/9BY3/DN71tsppQ

turbot пишет

Если вручную, то я по-прежнему создаю xml-ки в папке searchplugins.

Куда кинуть эту папку? Врочем, уже нашел.

Щелкните правой кнопкой мыши на поля формы поиска, чтобы добавить собственные поисковые системы.

BurningMoth AddSearch – Add-ons for Firefox

Как же все печально. :(

add_search-1.0-an+fx-windows.xpi\bg.js

Выделить код

Код:

// format API url ...
            // @todo When we can do this another way like Data URI scheme, scrap this custom api call ...
            var url = 'http://api.burningmoth.com/1/OpenSearchDescription.xml?json=' + encodeURIComponent( JSON.stringify( json ) );

            // add search / firefox will prompt ...
            window.external.AddSearchProvider( url );

Без вспомогательного сайта ничего работать не будет.

Infocatcher

Как же все печально

meeting.gif

Для работы с файлами mozlz4 в ОС Windows нужно установить Python. Затем к нему скачать пакет LZ4 x64, если установили x64 Python или LZ4 x86. После скачивания нужно его (пакет) установить. В консоли пишем (имя файла корректируйте)

pip install lz4-0.17.0-cp36-cp36m-win_amd64.whl

Теперь создайте файл, например convert.py, со следующим содержанием: (источник, код ниже слегка исправлен)

скрытый текст

Выделить код

Код:

#!/usr/bin/env python
#
# Decompressor/compressor for files in Mozilla's "mozLz4" format. Firefox uses this file format to
# compress e. g. bookmark backups (*.jsonlz4).
#
# This file format is in fact just plain LZ4 data with a custom header (magic number [8 bytes] and
# uncompressed file size [4 bytes, little endian]).
#
# This Python 3 script requires the LZ4 bindings for Python, see: https://pypi.python.org/pypi/lz4
#
#
# Copyright (c) 2015, Tilman Blumenbach
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted
# provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions
#    and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of
#    conditions and the following disclaimer in the documentation and/or other materials provided
#    with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import lz4.block
import sys

from argparse import ArgumentParser


class MozLz4aError(Exception):
    pass


class InvalidHeader(MozLz4aError):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg


def decompress(file_obj):
    if file_obj.read(8) != b"mozLz40\0":
        raise InvalidHeader("Invalid magic number")

    return lz4.block.decompress(file_obj.read())

def compress(file_obj):
    compressed = lz4.block.compress(file_obj.read())
    return b"mozLz40\0" + compressed


if __name__ == "__main__":
    argparser = ArgumentParser(description="MozLz4a compression/decompression utility")
    argparser.add_argument(
            "-d", "--decompress", "--uncompress",
            action="store_true",
            help="Decompress the input file instead of compressing it."
        )
    argparser.add_argument(
            "in_file",
            help="Path to input file."
        )
    argparser.add_argument(
            "out_file",
            help="Path to output file."
        )

    parsed_args = argparser.parse_args()


    try:
        in_file = open(parsed_args.in_file, "rb")
    except IOError as e:
        print("Could not open input file `%s' for reading: %s" % (parsed_args.in_file, e), file=sys.stderr)
        sys.exit(2)
    
    try:
        out_file = open(parsed_args.out_file, "wb")
    except IOError as e:
        print("Could not open output file `%s' for writing: %s" % (parsed_args.out_file, e), file=sys.stderr)
        sys.exit(3)

    try:
        if parsed_args.decompress:
            data = decompress(in_file)
        else:
            data = compress(in_file)
    except Exception as e:
        print("Could not compress/decompress file `%s': %s" % (parsed_args.in_file, e), file=sys.stderr)
        sys.exit(4)

    try:
        out_file.write(data)
    except IOError as e:
        print("Could not write to output file `%s': %s" % (parsed_args.out_file, e), file=sys.stderr)
        sys.exit(5)
    finally:
        out_file.close()


Ну, и наконец для распаковки, например файла search.json.mozlz4 выполните в консоли:
python convert.py -d search.json.mozlz4 search.json

Для упаковки обратно в формат mozlz4:
python convert.py search.json search.json.mozlz4

Для удобного редактирования json можно воспользоваться онлайн редактором

Редактировал поисковые плагины так: сначала добавлял нужные мне поисковики непосредственно в браузере, а затем редактировал их под свои нужды. Также есть база поисковых плагинов Mycroft Project, которые там же можно сразу отредактировать.
И напоследок: не трогайте встроенные поисковые плагины, т.к. после их изменения FF, весьма вероятно, загрузит дефолтный список поисковиков. А при синтаксической ошибке не будет работать поиск из адресной строки (даже по закладкам).

Скопировать файл search.json.mozlz4 из старого ФФ
Для изменения списка поисковиков держать портативную  ФФ 52 ESR
:cry::dumb:
---
Кстати, дополнения
add_to_search_bar-2.9-fx.xpi
search_engine_creator-1.0.1-fx.xpi
работают в ФФ57.
Второе мне не понравилось - все руками писать надо.
А первое проверил на aliprice. Поиск добавляется

Юзаю "добавить краткое имя для данного поиска".
Поисковые варианты сохраняются в отдельной папке в закладках.

Ищу в адресной строке, поисковик выбираю вводом префикса.
Например, для поиска на aliexpress ввожу в адресную строку [ali поисковой запрос].
Для поиска на картах google ввожу [кр поисковой запрос].
Для поиска на сайте расширений для лисы ввожу префикс adn.
Для поиска в гугле, если надо поискать что-то с точками (чтобы не было попытки перехода как на домен) ввожу [\ поисковой.запрос].
Ну и тд.
Результаты открываются сразу на нужных сайтах.

В search.json.mozlz4 у меня только два поисковика, которые и так были там изкоробки: google и duckduckgo.

В конфиге выключил отображение панели с кнопками поисковиков - только мешались.
user_pref("browser.urlbar.oneOffSearches", false);

Ну и поисковые предложения тоже отключил. Бессмысленная хрень.
user_pref("browser.search.suggest.enabled", false);

js90

Например, для поиска на aliexpress ввожу в адресную строку [ali поисковой запрос]...Для поиска на сайте расширений для лисы ввожу префикс adn

По русски - али и анд не проще, без смены раскладки?

oleg.sgh пишет

js90

Например, для поиска на aliexpress ввожу в адресную строку [ali поисковой запрос]...Для поиска на сайте расширений для лисы ввожу префикс adn

По русски - али и анд не проще, без смены раскладки?

Но... поисковой запрос на али и аддонах по английски всегда. Ты предлагаешь сделать префикс на русском, чтобы дважды сменить раскладку, если изначально она английская?
Именно поэтому для гугл карт префикс русскими буквами кр, потому что ищу адреса по русски.
Для гугла и дакдакго префиксы это слэши, ибо запрос может быть на любом языке.
Для других поисков цифры используются. Например для 4pda префикс просто 4.

А ещё я сделал
// Отключить кнопки поисковиков в выпадающем списке при поиске \\
user_pref("browser.urlbar.oneOffSearches", false);

js90

поисковой запрос на али и аддонах по английски всегда

Не подумал, ступил-с

oleg.sgh
А сам почему не используешь фичу префиксов?
В любом случае ведь удобнее пару лишних букв набрать, чем дважды переносить руку с мышки и обратно, тыкая по кнопкам.

js90
Использую русские, поэтому и ступил. Иностранное мне проще по русски у яндекса, в адресной строке спросить, чем иностранные буквы набирать. В большинстве случаях это срабатывает. Если что, то иностранное с выдачи жестом или этим

oleg.sgh
Не понял как можно найти по русски в яндексе что-то, что ищется только по английски и только на некоторых сайтах. Ну ладно.
Поиск выделенного текста я тоже добавить собирался (недавно на 57ую пересел, не настроил ещё). Но у тебя какой-то слишком громоздкий, плитки там какие-то и всё такое.
Я наверное этот поставлю https://addons.mozilla.org/en-US/firefox/addon/selection-context-search/

Способ ручного редактирования файла search.json.mozlz4 со способом добавления поисковых плагинов в него вручную смотрите тут

zzzephire пишет

Для работы с файлами mozlz4 в ОС Windows нужно установить Python. Затем к нему скачать пакет LZ4 x64, если установили x64 Python или LZ4 x86. После скачивания нужно его (пакет) установить. В консоли пишем (имя файла корректируйте)

pip install lz4-0.17.0-cp36-cp36m-win_amd64.whl

Теперь создайте файл, например convert.py, со следующим содержанием: (источник, код ниже слегка исправлен)

скрытый текст

Выделить код

Код:

#!/usr/bin/env python
#
# Decompressor/compressor for files in Mozilla's "mozLz4" format. Firefox uses this file format to
# compress e. g. bookmark backups (*.jsonlz4).
#
# This file format is in fact just plain LZ4 data with a custom header (magic number [8 bytes] and
# uncompressed file size [4 bytes, little endian]).
#
# This Python 3 script requires the LZ4 bindings for Python, see: https://pypi.python.org/pypi/lz4
#
#
# Copyright (c) 2015, Tilman Blumenbach
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted
# provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions
#    and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of
#    conditions and the following disclaimer in the documentation and/or other materials provided
#    with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import lz4.block
import sys

from argparse import ArgumentParser


class MozLz4aError(Exception):
    pass


class InvalidHeader(MozLz4aError):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg


def decompress(file_obj):
    if file_obj.read(8) != b"mozLz40\0":
        raise InvalidHeader("Invalid magic number")

    return lz4.block.decompress(file_obj.read())

def compress(file_obj):
    compressed = lz4.block.compress(file_obj.read())
    return b"mozLz40\0" + compressed


if __name__ == "__main__":
    argparser = ArgumentParser(description="MozLz4a compression/decompression utility")
    argparser.add_argument(
            "-d", "--decompress", "--uncompress",
            action="store_true",
            help="Decompress the input file instead of compressing it."
        )
    argparser.add_argument(
            "in_file",
            help="Path to input file."
        )
    argparser.add_argument(
            "out_file",
            help="Path to output file."
        )

    parsed_args = argparser.parse_args()


    try:
        in_file = open(parsed_args.in_file, "rb")
    except IOError as e:
        print("Could not open input file `%s' for reading: %s" % (parsed_args.in_file, e), file=sys.stderr)
        sys.exit(2)
    
    try:
        out_file = open(parsed_args.out_file, "wb")
    except IOError as e:
        print("Could not open output file `%s' for writing: %s" % (parsed_args.out_file, e), file=sys.stderr)
        sys.exit(3)

    try:
        if parsed_args.decompress:
            data = decompress(in_file)
        else:
            data = compress(in_file)
    except Exception as e:
        print("Could not compress/decompress file `%s': %s" % (parsed_args.in_file, e), file=sys.stderr)
        sys.exit(4)

    try:
        out_file.write(data)
    except IOError as e:
        print("Could not write to output file `%s': %s" % (parsed_args.out_file, e), file=sys.stderr)
        sys.exit(5)
    finally:
        out_file.close()


Ну, и наконец для распаковки, например файла search.json.mozlz4 выполните в консоли:
python convert.py -d search.json.mozlz4 search.json

Для упаковки обратно в формат mozlz4:
python convert.py search.json search.json.mozlz4

Для удобного редактирования json можно воспользоваться онлайн редактором

Редактировал поисковые плагины так: сначала добавлял нужные мне поисковики непосредственно в браузере, а затем редактировал их под свои нужды. Также есть база поисковых плагинов Mycroft Project, которые там же можно сразу отредактировать.
И напоследок: не трогайте встроенные поисковые плагины, т.к. после их изменения FF, весьма вероятно, загрузит дефолтный список поисковиков. А при синтаксической ошибке не будет работать поиск из адресной строки (даже по закладкам).

Спасибо тебе добрый молодец, за этот пост!!!
Mycroft Project

Add custom search engine – Add-ons for Firefox

oleg.sgh
Премного благодарен за наводку. Даже и не мечтал, что можно вручную через интерфейс склепать себе поиск:)
Архиполезый плагин!

Acid Crash
И склепать и отредактировать.
mozlz4-edit – Add-ons for Firefox

oleg.sgh
Наконец появились дополнения для клепания поисковиков

Есть поисковый адрес, который правильно работает с цифрами и латиницей. Кириллицей выдает кракозябры и не находит то, что заказано.

Выделить код

Код:

https://kinogo.by/?titleonly=3&do=search&subaction=search&story=%s

Можно сюда вставить кодировку в WINDOWS-1251?
Если адрес добавить в сам Firefox с этой кодировкой, то поиск работает.  Нужен адрес для дополнения поиска выделенного текста.
Пробовал добавлять кодировку в ссылку - не помогло. Может не туда и не так добавлял...

На сайте Филмикс перестала работать поисковая ссылка http://filmix.co/search/%s
Есть у кого рабочий вариант?

oleg.sgh
То же самое только httpS

zzzephire
Неа, в адресной запрос есть, но открывается только страница расширенного поиска.