我想为所有内容加载CSS文件。 对于元素:标签,侧边栏,标签,窗口,选项,开发人员工具等。 我需要这个来改变滚动条。
如何在Firefox addons-sdk中执行此操作?
答案 0 :(得分:1)
通过evrything你实际上意味着浏览器区域。所以你想要做的是在@-moz-document url("chrome://browser/content/browser.xul") {
和}
的括号内编写CSS。否则CSS会影响网页中的内容。
有两种方法可以加载CSS工作表,一种是nsIStyleSheetService
,另一种是
window.loadSheet
。
推荐使用window.loadSheet
。你会这样做:
function registerWindows() {
var _uri = Services.io.newURI("chrome://aus-view/skin/toolbar.css", null, null);
aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).loadSheet(_uri, 1);
}
function unregisterWindows() {
var _uri = Services.io.newURI("chrome://aus-view/skin/toolbar.css", null, null);
aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).removeSheet(_uri, 1);
}
您必须确保将工作表加载到新打开的窗口中。
使用nsIStyleSheetService,您只需loadAndRegisterSheet
,然后您就不必担心窗口打开和关闭。但我听到的表现更难。我不知道这个表演的来源。
Cu.import('resource://gre/modules/Services.jsm');
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var cssUri = Services.io.newURI('chrome://content/path/to/your/file.css', null, null);
sss.loadAndRegisterSheet(cssUri, sss.USER_SHEET);
然后当你想删除它时,你只需:
sss.unregisterSheet(cssUri, sss.USER_SHEET);
现在这些都使用了文件。您可以创建一个没有任何文件的URI:
var css = '';
css += '* { background-color: red; }';
css += '*.hover { background-color: blue; }';
var cssEncoded = encodeURIComponent(css);
var cssEncodedWithDataURL = 'data:text/css,' + cssEncoded
然后我们以相同的方式创建URI:var cssUri = Services.io.newURI(cssEncodedWithDataURL, null, null);
然后您只需以相同的方式加载stylehseet。 (使用第二种方法的例子:sss.unregisterSheet(cssUri, sss.USER_SHEET)
)