Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
// ==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 をリロードするメニューを作る。
Stylesheet Service を利用した追加&リロードではなく、本来の css をリロードできる…はず。
userChrome/userContent.css に :root {} を記述しておくこと。
*/
(function(){
"use strict";
var ins = document.getElementById("browserToolsSeparator");
var m = document.createElement("menuitem");
m.setAttribute("id", "reload_userchrome_css");
m.setAttribute("label", "Reload 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", "Reload 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;
}
})();
@melmoo

This comment has been minimized.

Copy link

commented Jan 10, 2013

こういうのを待っていました。KeyChangerのように、右クリックで当該ファイルが開けるように出来ないでしょうか。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.