Добрый день. Прошу помощи у форумчан. Необходимо решить задачу, по изменению путей к файлам в портабельной версии Firefox. Итак , у меня изменён стиль FF посредством Stylish и Userchrom. Изменены цвета , фоны , кнопки и тд. Встала необходимость переноса FF на флешку и естественно появилась проблема с путями . Сейчас пути к файлам выглядят так "url("file:///D:/Firefox/Folder/K333.jpg". Как прописать пути к файлам , чтобы пути к изображениям были постоянными и не зависли от буквы флешки  присвоенной системой, при работе с  флешки на разных с компьютерах. Вариант с url(имя.тип) в папке chrome не работает. Изображения достаточно большие (фоны) и переводу в base64 нежелательны. Заранее спасибо.

Для userContent/userChrome: https://forum.mozilla-russia.org/viewto … 68#p682968
В Stylish - только конвертировать в base64.

Не могу подцепить из юзерХром вот такой код, в Stylish работает.

Выделить код

Код:

@namespace url(http://www.w3.org/1999/xhtml);
@-moz-document url(https://www.мойсайт.ru/) {
  body, html {background: url("gothamgard.jpg") !important;   background-color: inherit !importan} 
}
Duche пишет

из юзерХром

Может, потому что коды для сайтов нужно в userContent.css класть? :rolleyes:

turbot пишет

userContent.css класть

Поклал ,сработало. И маленький вопрос для самообразования. Существует ли ограничение по размеру конвертируемого в Base64 файла.

Примите искреннюю благодарность за Вашу работу.

Существует ли ограничение по размеру конвертируемого в Base64 файла.

Стоит избегать конвертирования файлов больше одного-двух мегабайтов. По личным наблюдениям. Сказывается на производительности. Это единственное ограничение, насколько мне известно.

turbot пишет

Стоит избегать конвертирования файлов больше одного-двух мегабайтов.

Понял. Спасибо.

turbot пишет

В Stylish - только конвертировать в base64.

Я бы добавил в конфигурационный файл код, и заменил бы file:///D: на resource://root

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

Выделить код

Код:

//
(({utils: Cu, interfaces: Ci}) => { try {

    var {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
    var file = Services.dirsvc.get("GreD", Ci.nsIFile);
    while(file.parent) file = file.parent;

    Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler)
        .setSubstitution("root", Services.io.newFileURI(file));

} catch(ex) {}})(Components);

Dumby
Полезно. Спасибо. :beer:

turbot пишет

Я бы добавил в конфигурационный файл код, и заменил бы file:///D: на resource://root

Я правильно  понял, что код от Dumby надо добавить в userContent.css , а путь  "url("file:///D:/Firefox/Folder/K333.jpg", переписать на  "url("resource://root:/Firefox/Folder/K333.jpg".
Два вопроса . Надо ли добавить закрывающую скобку в коде Dumby , после " catch(ex) {}})(Components);  и для чего такое дополнение надо.

Duche пишет

Я правильно  понял

Нет, не правильно. Вот смотри, добавь код в инициализацию
какой-нибудь Custom Buttons кнопки, скопируй K333.jpg в папку chrome,
затем открой адрес resource://chrome/K333.jpg

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

Выделить код

Код:

(({io, dirsvc, prefs}) => {

    var substitution = "chrome", dir = "UChrm";

    var rph = io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    addDestructor(reason => reason[5] == "e" && rph.hasSubstitution(substitution) && rph.setSubstitution(substitution, null));
    if (rph.hasSubstitution(substitution)) return;

    rph.setSubstitution(substitution, io.newFileURI(dirsvc.get(dir, Ci.nsIFile)));
    if (!prefs.getBoolPref("extensions.stylish.styleRegistrationEnabled")) return;
    stylishOverlay.turnOnOff(false); stylishOverlay.turnOnOff(true);

})(Services);

Dumby пишет

Нет, не правильно. Вот смотри

Работает , картинка открывается из chrome . А каково отличие вашего способа с кодом и resource://chrome, от способа , положить K333.jpg в папку chrome, и указать путь {background: url("K333.jpg") , тоже срабатывает или есть тонкости?

Duche
У меня так.

Dumby пишет

У меня так.

Что должно получится понятно и работает . А в чем + или - вашего способа . Или это просто , два способа достижения одной цели.

Duche
Да нету никакого моего способа.
Просто turbot сказал — как отрезал

В Stylish - только конвертировать в base64.

вот я и встрял. :)

Dumby пишет

вот я и встрял

Понятно. Спасибо за помощь и разъяснения.
Вопрос не по теме, что бы не плодить темы. Есть возможность такое сделать с путями сохранения файлов при скачивании , потом прописать их в about:config . У меня пути D:\Папка для скачивания , хочется что бы пути были постоянными и не зависли от буквы флешки , присвоенной системой, при работе с  флешки на разных с компьютерах.

Duche
Можно переписать первую букву настройки.

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

Выделить код

Код:

((pref, disk, dir) =>
    //Date.now() - Services.startup.getStartupInfo().firstPaint < 500 &&
    //!Services.startup.wasRestarted &&
    (dir = Preferences.get(pref)) && dir[0] != disk &&
    Preferences.set(pref, disk + dir.slice(1))
)("browser.download.dir", OS.Constants.Path.libDir[0]);

Dumby пишет

Можно переписать первую букву настройки.

Переписать на что и где?

Duche пишет

Переписать на что и где?

Dumby, turbot. A-уууууууууу. Где Вы ,братья по разуму. Осталось чуть доделать.

Просто положите код Dumby либо в конфигурационный файл (не забывайте про обязательность наличия закоментированной первой строки), либо в инициализацию Custom Buttons кнопки.

turbot пишет

Просто положите код

Dumby пишет

Duche
Можно переписать первую букву настройки.

Повторюсь "Переписать на что и где?"

Код положил давно,но не получается намертво привязать свои пути "D или H,G итд :\Папка для скачивания" к всем скачиваемым Firefof файлам,  что бы пути были постоянными и не зависли от буквы флешки , присвоенной системой, при работе с  флешки на разных с компьютерах.

Duche
Код автоматически, при инициализации, если буква диска в параметре about:config'а browser.download.dir не совпадает с той, с которой запущен браузер, меняет ее.

turbot пишет

Код автоматически, при инициализации, если буква диска в параметре about:config'а browser.download.dir не совпадает с той, с которой запущен браузер, меняет ее.

Спасибо за разъяснение. Я правильно понял , если в коде изменить "browser.download.dir" на "extensions.downloadbar.audioplayerpath" , то таким образом можно прописать пути к звукам при завершении загрузки. Если я прав, то необходимо  создать два кода с разными строками "browser.download.dir"и "extensions.downloadbar.audioplayerpath" или две строки через запятую, в одном коде.

Duche
Можно так:

Выделить код

Код:

((prefs, disk, dir) => 
 prefs.forEach(pref => (dir = Preferences.get(pref)) && dir[0] != disk
               && Preferences.set(pref, disk + dir.slice(1)))
)(["browser.download.dir", "extensions.downloadbar.audioplayerpath"], OS.Constants.Path.libDir[0])

В ["browser.download.dir", "extensions.downloadbar.audioplayerpath"] - можете и другие параметры дописывать, по образцу.

turbot пишет

Можно так:

turbot.  Примите искреннюю благодарность за Вашу работу и разъяснения. Буду пробывать.

turbot пишет

Просто положите код Dumby либо в конфигурационный файл

Конфигурационный файл это- userContent ?

https://forum.mozilla-russia.org/viewto … 04#p720004

turbot пишет

https://forum.mozilla-russia.org/viewto … 04#p720004

Так? D:\Firefox\Profile\config.js

Нет. Там же написано. config.js - в папку браузера. Не профиля. Туда, где исполняемый файл находится. config-prefs.js - в папку pref, в папке defaults, в папке браузера.

turbot пишет

Нет.

Большое спасибо!

24-08-2016 20:47:42

turbot пишет

https://forum.mozilla-russia.org/viewto … 04#p720004

В моём случае, config-prefs.js нужен?

Да.

turbot пишет

Да.

По образцу -

Выделить код

Код:

pref("general.config.obscure_value", 0);
pref("general.config.filename", "config.js");

Создал,положил, config-prefs.js по образцу постом выше - D:\Firefox\Firefox\defaults\pref\config-prefs.js а config.js в D:\Firefox\config.js , пути не путал , первую строку в вашем (turbot) коде закомментировал , проверил js внутри, всё правильно. Проверял коды turbot и Dumby, а в ответ:

2016-08-03_193237.png

turbot пишет

не забывайте про обязательность наличия закоментированной первой строки

https://forum.mozilla-russia.org/viewto … 16#p720016

turbot пишет

строку в вашем (turbot) коде закомментировал

Закомментировал , разкомментировал ,не работает. Не пойму в чём дело.

А, действительно, не работает. Я попробовал сделать:

Выделить код

Код:

//
try {
    const {Services}  = Components.utils.import("resource://gre/modules/Services.jsm", {});
    const {OS} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
    ((prefs, disk, dir) => 
     prefs.forEach(pref => (dir = Services.prefs.get(pref)) && dir[0] != disk
                   && Services.prefs.set(pref, disk + dir.slice(1)))
    )(["browser.download.dir", "extensions.downloadbar.audioplayerpath"], OS.Constants.Path.libDir[0])
} catch (ex) {};

Но нет. Не знаю, как сделать, чтобы код в файле заработал. Ждите Dumby. Либо используйте CB. Он же у вас и так стоит. Зачем вам вообще тогда эта возня с конфигурационным файлом?

turbot пишет

Зачем вам вообще тогда эта возня с конфигурационным файлом

Подождём Dumby, только бы тему увидел. Тему буду смотреть ежедневно. Я насчёт  конфигурационного файла , всё просто. Подальше положишь , дольше проработает FF.
Спасибо за помощь.

Я решил отписаться здесь, поскольку мой вопрос тоже касается пути к файлу. Я конвертировал картинку в base64 и хочу прописать полученный код в css файл в виде

Выделить код

Код:

background-image: url(data:image/png;base64, //и дальше мой код

Но дело в том, что в css файле эта картинка подставляется в нескольких местах. И я каждый раз должен вставлять этот монструозный base64 код. css файл разбухает, при том, что сама картинка весит всего 10 кб.

Вопрос: можно ли эту base64 строку сохранить в переменную или еще как то, чтобы подставлять ее, а не писать в нескольких местах один и тот же огромный код?

Ki_rrrilll Используйте css-переменные.

Выделить код

Код:

parent { --my-bg-image: url(data:image/png;base64, /* code */) }

child { background-image: var(--my-bg-image) }

Замените parent и child на свои пары элементов, либо используйте псевдокласс `:root` в качестве самого старшего родителя.

Ссылки по теме:

Using CSS variables
:root

FireForce

Ki_rrrilll Используйте css-переменные.

Я даже не знал, что это существует. Большое спасибо!