Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№120-04-2014 18:35:38

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Palemoon 24.0

Перегрузить userContent.css

Как можно перегрузить вручную/кнопкой/~другим способом правила в файле userContent.css !без перезапуска браузера!
т.е. шобы можно было добавлять правила в файл userContent.css не перезапуская весь браузер, а лишь жмакая на кнопку... или горячую клавишу какую.
---edited---

Отредактировано HaGEN (08-09-2014 03:42:57)

Отсутствует

 

№202-04-2015 13:48:45

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Firefox 32.0

Re: Перегрузить userContent.css

Нашел!
Скритег создает в меню "Инструменты" два пункта с соотв. действием : "Перегрузить userChrome.css" и "Перегрузить userContent.css" Просто праздник кокой-то :D

Скрипт чуть переведенный с японского

Выделить код

Код:

// ==UserScript==
// @name           reload_userChrome_and_userContent.uc.js
// @description    ┐(´ー`)┌
// @namespace      http://d.hatena.ne.jp/Griever/
// @author         Griever
// @license        MIT License
// @compatibility  Firefox 17
// @charset        UTF-8
// @include        main
// @version        0.0.1
// ==/UserScript==
/*
Скрипт создаст в меню Инструменты пункты "Перегрузить userChrome/userContent.css "
Дает возомжность перезагрузить правила в этих файлах без перезапуска бравзера. Урачтоле!
*/
(function(){
"use strict";

var ins = document.getElementById("browserToolsSeparator");
var m = document.createElement("menuitem");
m.setAttribute("id", "reload_userchrome_css");
m.setAttribute("label", "Перегрузить userChrome.css");
m.setAttribute("oncommand", "reloadUserChromeCSS();");
ins.parentNode.insertBefore(m, ins);

var m = document.createElement("menuitem");
m.setAttribute("id", "reload_usercontent_css");
m.setAttribute("label", "Перегрузить userContent.css");
m.setAttribute("oncommand", "reloadUserContentCSS();");
ins.parentNode.insertBefore(m, ins);


var inIDOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);

window.reloadUserChromeCSS = function() {
  var aFile = Services.dirsvc.get("UChrm", Ci.nsILocalFile);
    aFile.appendRelativePath("userChrome.css");

    var fileURL = Services.io.getProtocolHandler("file")
        .QueryInterface(Ci.nsIFileProtocolHandler)
        .getURLSpecFromFile(aFile);

    var rule = getStyleSheet(document.documentElement, fileURL);
    if (!rule) return;

    inIDOMUtils.parseStyleSheet(rule, loadText(aFile));
    rule.insertRule(":root{}", rule.cssRules.length);// おまじない
    // ウインドウを一度背面にする必要がある
    alert("Правила userChrome.css перезагружены");
};

window.reloadUserContentCSS = function() {
    var aFile = Services.dirsvc.get("UChrm", Ci.nsILocalFile);
    aFile.appendRelativePath("userContent.css");

    var fileURL = Services.io.getProtocolHandler("file")
        .QueryInterface(Ci.nsIFileProtocolHandler)
        .getURLSpecFromFile(aFile);

    var rule = getStyleSheet(content.document.documentElement, fileURL);
    if (!rule) return;

    inIDOMUtils.parseStyleSheet(rule, loadText(aFile));
    rule.insertRule(":root{}", rule.cssRules.length);// おまじない
    // 再描画処理
    var s = gBrowser.markupDocumentViewer;
    s.authorStyleDisabled = !s.authorStyleDisabled;
    s.authorStyleDisabled = !s.authorStyleDisabled;
};

function getStyleSheet(aElement, cssURL) {
    var rules = inIDOMUtils.getCSSStyleRules(aElement);
    var count = rules.Count();
    if (!count) return null;

    for (var i = 0; i < count; ++i) {
        var rule = rules.GetElementAt(i).parentStyleSheet;
        if (rule && rule.href === cssURL)
            return rule;
    };
    return null;
}

function loadText(aFile) {
    if (!aFile.exists() || !aFile.isFile()) return null;
    var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
    var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
    fstream.init(aFile, -1, 0, 0);
    sstream.init(fstream);
    var data = sstream.read(sstream.available());
    try { data = decodeURIComponent(escape(data)); } catch(e) {}
    sstream.close();
    fstream.close();
    return data;
}

})();


Кладём код в кнопку CB в Инициализацию и вуаля!
Автор сего волшебного кода Griever Страничка афтара на японском
Так же благодарность тов. SendInfo за его наводку на плугин UC. полез искать для него скрипты и вот нашел на гитхабе тут
Всё работает в моём PaleMoon 23.
6612980m.jpg

Отредактировано HaGEN (02-04-2015 13:52:07)

Отсутствует

 

№302-04-2015 14:09:15

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 37.0

Re: Перегрузить userContent.css

HaGEN
В 37 [firefox] кнопка не активна, почему то.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№402-04-2015 14:40:43

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Firefox 32.0

Re: Перегрузить userContent.css

хехе, щас попробовал в FF 33. тоже не работает. Видать связано с Автралисом ибо ежели заменить в коде:

Выделить код

Код:

var ins = document.getElementById("browserToolsSeparator");

на

Выделить код

Код:

var ins = document.getElementById("menu_openDownloads");

... то появляются пункты в меню Инструменты, но ничче не делают. яхз. надобно гуру просить шобы поглядели в чем тут дело :/

Отсутствует

 

№502-04-2015 17:01:06

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 40.0

Re: Перегрузить userContent.css

Достаточно убрать строку

Выделить код

Код:

"use strict";

и все работает (понятия не имею, что это). :)
Спасибо за полезную кнопку.

Отсутствует

 

№602-04-2015 18:36:50

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Firefox 32.0

Re: Перегрузить userContent.css

okkamas_knife пишет

не проще ли ...

ЭхЪ :) ябы только за, но онож не желает в секции кода работать поцчемуто. Только в Инициализации - тогда работает и можно с секцию кода вставить две (или одну) комманды

Выделить код

Код:

reloadUserChromeCSS();
reloadUserContentCSS();

... и по клику можно перегружать файлы, шобы не лазать в менюшки. А так, чисто из code у мну ничего не происходит. Вообще это именно и хотелось бы, шобы только в code,  но так тоже норм.

Добавлено 02-04-2015 19:05:34

turbot пишет

Достаточно убрать строку

Точна . В FF 33 перегружает userContent.css , но не перегружает userChrome.css
В PaleMoon перегружает и userChrome.css
Ежели хто докопается до сути пжалста дайте знать.

Отредактировано HaGEN (02-04-2015 19:05:34)

Отсутствует

 

№702-04-2015 19:34:50

ffx2014
Участник
 
Группа: Members
Зарегистрирован: 12-05-2014
Сообщений: 89
UA: Firefox 37.0

Re: Перегрузить userContent.css

HaGEN
Поставь Stylish, и в корзину этот userContent.css

Отсутствует

 

№802-04-2015 20:42:02

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Firefox 32.0

Re: Перегрузить userContent.css

Смысл как раз в обратном - убрать дополнения. тем более что бравзер всё это и так делает(загружает стили из файлов) , но не может их применить без перезапуска. Это же тупо. А с этим скриптом логика существования этих файлов приходит  в норму. В своём редакторе с подсветкой и закладками удобно пишешь стили и применяешь сразу, правишь. Красота.

Отсутствует

 

№902-04-2015 21:05:28

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 37.0

Re: Перегрузить userContent.css

Убрал "use strict"; заменил var ins = document.getElementById("browserToolsSeparator");
появились пункты, но алерты не выскакивают. Сам тоже не пользуюсь Stylish, в редакторе править удобнее с подсветкой. Кнопка действительно бы облегчила жизнь.
У кого появится рабочая, свистните.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№1002-04-2015 21:49:40

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 40.0

Re: Перегрузить userContent.css

HaGEN пишет

но не перегружает userChrome.css

Действительно, поленинлся и проверил только с первым. Виноват. shuffle.gif

Отсутствует

 

№1102-04-2015 21:53:38

HaGEN
Забанен
 
Группа: Members
Зарегистрирован: 04-07-2013
Сообщений: 155
UA: Firefox 32.0

Re: Перегрузить userContent.css

Вот код кнопки который работает в FF 33.1 на половину. Перегружает только "стили сайтов" userContent.css
Настройки бравзера (userChrome.css) не обновляются.

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

Выделить код

Код:

// ==UserScript==
// @name           reload_userChrome_and_userContent.uc.js
// @description    ┐(´ー`)┌
// @namespace      http://d.hatena.ne.jp/Griever/
// @author         Griever
// @license        MIT License
// @compatibility  Firefox 17
// @charset        UTF-8
// @include        main
// @version        0.0.1
// ==/UserScript==
/*
Скрипт создаст в меню Инструменты пункты "Перегрузить userChrome/userContent.css "
Дает возомжность перезагрузить правила в этих файлах без перезапуска бравзера. Урачтоле!
*/
(function(){

// "use strict";

var ins = document.getElementById("menu_openDownloads");
// var ins = document.getElementById("browserToolsSeparator");
 var m = document.createElement("menuitem");
 m.setAttribute("id", "reload_userchrome_css");
 m.setAttribute("label", "Перегрузить userChrome.css");
 m.setAttribute("oncommand", "reloadUserChromeCSS();");
 ins.parentNode.insertBefore(m, ins);

 var m = document.createElement("menuitem");
 m.setAttribute("id", "reload_usercontent_css");
 m.setAttribute("label", "Перегрузить userContent.css");
 m.setAttribute("oncommand", "reloadUserContentCSS();");
 ins.parentNode.insertBefore(m, ins);




var inIDOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils);

window.reloadUserChromeCSS = function() {
  var aFile = Services.dirsvc.get("UChrm", Ci.nsILocalFile);
    aFile.appendRelativePath("userChrome.css");

    var fileURL = Services.io.getProtocolHandler("file")
        .QueryInterface(Ci.nsIFileProtocolHandler)
        .getURLSpecFromFile(aFile);

    var rule = getStyleSheet(document.documentElement, fileURL);
    if (!rule) return;

    inIDOMUtils.parseStyleSheet(rule, loadText(aFile));
    rule.insertRule(":root{}", rule.cssRules.length);// おまじない
    // ウインドウを一度背面にする必要がある
alert("Правила userChrome.css перезагружены");
};

window.reloadUserContentCSS = function() {
    var aFile = Services.dirsvc.get("UChrm", Ci.nsILocalFile);
    aFile.appendRelativePath("userContent.css");

    var fileURL = Services.io.getProtocolHandler("file")
        .QueryInterface(Ci.nsIFileProtocolHandler)
        .getURLSpecFromFile(aFile);

    var rule = getStyleSheet(content.document.documentElement, fileURL);
    if (!rule) return;

    inIDOMUtils.parseStyleSheet(rule, loadText(aFile));
    rule.insertRule(":root{}", rule.cssRules.length);// おまじない
    // 再描画処理
    var s = gBrowser.markupDocumentViewer;
    s.authorStyleDisabled = !s.authorStyleDisabled;
    s.authorStyleDisabled = !s.authorStyleDisabled;
alert("Правила userContent.css перезагружены");
};

function getStyleSheet(aElement, cssURL) {
    var rules = inIDOMUtils.getCSSStyleRules(aElement);
    var count = rules.Count();
    if (!count) return null;

    for (var i = 0; i < count; ++i) {
        var rule = rules.GetElementAt(i).parentStyleSheet;
        if (rule && rule.href === cssURL)
            return rule;
    };
    return null;
}

function loadText(aFile) {
    if (!aFile.exists() || !aFile.isFile()) return null;
    var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
    var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
    fstream.init(aFile, -1, 0, 0);
    sstream.init(fstream);
    var data = sstream.read(sstream.available());
    try { data = decodeURIComponent(escape(data)); } catch(e) {}
    sstream.close();
    fstream.close();
    return data;
}

})();

Отредактировано HaGEN (02-04-2015 21:54:28)

Отсутствует

 

№1203-04-2015 10:31:52

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2255
UA: Firefox 31.0

Re: Перегрузить userContent.css

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

Код ищет среди правил, применяемых к #main-window, такое,
href parentStyleSheet'а которого будет адесом userChrome.css, и,
если находит, то применяет метод inIDOMUtils.parseStyleSheet.

Но если в userChrome.css нет никаких правил для #main-window,
то код не сможет найти отсутствующее правило.

Можно, конечно, попробовать поискать среди всех элементов во всех окнах,
но лучше просто добавить в userChrome.css строку
:root {}
и перезапустить браузер.

И, если дело было в этом, то теперь
перезагрузка userChrome.css должна будет работать.

Отсутствует

 

№1303-04-2015 12:04:26

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 40.0

Re: Перегрузить userContent.css

Работает, спасибо. :beer:

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]