Подмогните с кнопкой перегрузки userChrome.css (не понимает переменные)

Обсуждения на русском языке
User avatar
jars_
Lunatic
Lunatic
Posts: 397
Joined: 2016-12-27, 00:12

Подмогните с кнопкой перегрузки userChrome.css (не понимает переменные)

Unread post by jars_ » 2018-01-13, 23:38

Привет.
Есть кнопка для перегрузки файлов userChrome\Content.css без перезапуска бравзера. Очень и очень нужная и полезная кнопка :

Code: Select all

// script author: Griever       http://d.hatena.ne.jp/Griever/
// Кнопка перезагружает файлы (userChrome | userContent).css прям сразу. без перезагрузки бравзера
// Шобы работало в версиях FF 24+  и PaleMoon 25+ в начало файлов нужно вставить строку:    root{};
// */ Initialization */
 this.onclick = function(e) {
      switch (e.button) {
        case 0:
            reloadUserChromeCSS();
            break;
        case 1:
            gShowPopup(this);  // custombuttons.editButton(this);
            break;
        case 2:
            if ( e.ctrlKey || e.shiftKey ) {
                  this.oncontextmenu = function() { return true; }
                  return;
                  }

             this.oncontextmenu = function() { return false; }
             reloadUserContentCSS();
             self.checked = true;
             setTimeout(()=> self.checked = false, 450);
             break;
      }
 };


 this.tooltipText = "ЛКМ - перезагрузить userChrome.css\n\
 ПКМ - перезагрузить userContent.css\n\
 -------------------------------------------------------\n\
 СКМ - редактировать кнопку";

(function(){
// "use strict";
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;
}

})();

все было прекрасно и замечательно, больше года пользовался. Но вот недавно я узнал за переменные в CSS :) и - не хочет эта кнопка с переменными управляться. Выдает ошибку:

Code: Select all

Метка времени: 14.01.2018 1:30:48
Предупреждение: Свойство содержит ссылку на некорректную переменную.  Ошибка при парсинге значения «background-size».  Переключаюсь на 'initial'.
Источник: file:///D:/MyPROGRAMs/INET/PaleMoon/Profiles/test-prof/chrome/userChrome.css
Строка 1077, символ 50730
Исходный код:
 var( --bg-image1 ) repeat 
В файле такая конструкция userChrome.css :

Code: Select all

:root {
	--bg-image1: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAwElEQVR4Aa3UQQ7EIAgF0Opar6EH8P6ncq/zHRJDYqGFGReG1vgEYgy11jnnpY6cs7p+BYxSCmbdeoSwfUE4TbceoSUQpFs2SOmCGUKB4M5+mSFK6uyXEzr75YdgxRjHGJTjTxDPywnxHlHshKicPcNKKe1PKQitNWlt/++971gK3kK83lvrLYTNumWAdMsGweL3i9dohqS8PNCt5YRO66/QenG/LxFvHo+lC0m76P1aGekXBKIE0WG03V8aTxnWB1sBeKAvWJlOAAAAAElFTkSuQmCC");
	}

#allTabs-panel,
#ctrlTab-panel {
	-moz-appearance: none !important;
	background: var( --bg-image1 ) repeat !important;
	}

Вот в этом и вопрос : при перезапуске бравзера все загружается как надо, переменная грузится и фон применяется. А кнопкой нет.
Подскажите кто знает что поправить в кнопке.

Locked