Created
December 23, 2012 09:03
-
-
Save Griever/4362667 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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; | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
こういうのを待っていました。KeyChangerのように、右クリックで当該ファイルが開けるように出来ないでしょうか。