Как можно перегрузить вручную/кнопкой/~другим способом правила в файле userContent.css !без перезапуска браузера!
т.е. шобы можно было добавлять правила в файл userContent.css не перезапуская весь браузер, а лишь жмакая на кнопку... или горячую клавишу какую.
---edited---
Отредактировано HaGEN (08-09-2014 03:42:57)
Отсутствует
Нашел!
Скритег создает в меню "Инструменты" два пункта с соотв. действием : "Перегрузить userChrome.css" и "Перегрузить userContent.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("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; } })();
Отредактировано HaGEN (02-04-2015 13:52:07)
Отсутствует
хехе, щас попробовал в FF 33. тоже не работает. Видать связано с Автралисом ибо ежели заменить в коде:
на
... то появляются пункты в меню Инструменты, но ничче не делают. яхз. надобно гуру просить шобы поглядели в чем тут дело
Отсутствует
Достаточно убрать строку
и все работает (понятия не имею, что это).
Спасибо за полезную кнопку.
Отсутствует
не проще ли ...
ЭхЪ ябы только за, но онож не желает в секции кода работать поцчемуто. Только в Инициализации - тогда работает и можно с секцию кода вставить две (или одну) комманды
... и по клику можно перегружать файлы, шобы не лазать в менюшки. А так, чисто из code у мну ничего не происходит. Вообще это именно и хотелось бы, шобы только в code, но так тоже норм.
Добавлено 02-04-2015 19:05:34
Достаточно убрать строку
Точна . В FF 33 перегружает userContent.css , но не перегружает userChrome.css
В PaleMoon перегружает и userChrome.css
Ежели хто докопается до сути пжалста дайте знать.
Отредактировано HaGEN (02-04-2015 19:05:34)
Отсутствует
Смысл как раз в обратном - убрать дополнения. тем более что бравзер всё это и так делает(загружает стили из файлов) , но не может их применить без перезапуска. Это же тупо. А с этим скриптом логика существования этих файлов приходит в норму. В своём редакторе с подсветкой и закладками удобно пишешь стили и применяешь сразу, правишь. Красота.
Отсутствует
Убрал "use strict"; заменил var ins = document.getElementById("browserToolsSeparator");
появились пункты, но алерты не выскакивают. Сам тоже не пользуюсь Stylish, в редакторе править удобнее с подсветкой. Кнопка действительно бы облегчила жизнь.
У кого появится рабочая, свистните.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Вот код кнопки который работает в 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)
Отсутствует
Для тех, у кого не работает перезагрузка userChrome.css,
предположу вариант, почему это может происходить.
Код ищет среди правил, применяемых к #main-window, такое,
href parentStyleSheet'а которого будет адесом userChrome.css, и,
если находит, то применяет метод inIDOMUtils.parseStyleSheet.
Но если в userChrome.css нет никаких правил для #main-window,
то код не сможет найти отсутствующее правило.
Можно, конечно, попробовать поискать среди всех элементов во всех окнах,
но лучше просто добавить в userChrome.css строку
:root {}
и перезапустить браузер.
И, если дело было в этом, то теперь
перезагрузка userChrome.css должна будет работать.
Отсутствует