如何在/ skin上注入CSS?

时间:2010-08-29 04:49:51

标签: firefox firefox-addon

我想在浏览器页面中的skin文件夹中注入一个css文件。

它位于chrome://orkutmanager/skin/om.css,手动显示正确的文件内容。

tried this,但它不起作用......我错过了什么,或者它不可能?

3 个答案:

答案 0 :(得分:2)

您还可以使用nsIStyleSheetService

loadCSS: function() {
     var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
                .getService(Components.interfaces.nsIStyleSheetService);
     var ios = Components.classes["@mozilla.org/network/io-service;1"]
                .getService(Components.interfaces.nsIIOService);
     var uri = ios.newURI("chrome://addon/skin/style.css", null, null);

     if(!sss.sheetRegistered(uri, sss.USER_SHEET))
         sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
}

如果您使用USER_SHEET,则网站自己的CSS规则优先于您的规则。使用AGENT_SHEET,您的CSS应该具有更高的优先级 无论如何,我需要使用hte !important关键字强制执行一些规则。

答案 1 :(得分:1)

我发现了这个解决方法。阅读文件,然后注入它的内容......

function Read(file)
{
    var ioService=Components.classes["@mozilla.org/network/io-service;1"]
        .getService(Components.interfaces.nsIIOService);
    var scriptableStream=Components
        .classes["@mozilla.org/scriptableinputstream;1"]
        .getService(Components.interfaces.nsIScriptableInputStream);

    var channel=ioService.newChannel(file,null,null);
    var input=channel.open();
    scriptableStream.init(input);
    var str=scriptableStream.read(input.available());
    scriptableStream.close();
    input.close();
    return str;
}

var style = $("<style type='text/css' />");
style.html(Read("chrome://orkutmanager/skin/om.css"));
$("head").append(style);

答案 2 :(得分:1)

如果您引用页面文档,我发现您引用的link有效。就我而言,使用gBrowser.contentDocument工作。

var fileref = gBrowser.contentDocument.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", "resource://extensionid/content/skin/style.css");
gBrowser.contentDocument.getElementsByTagName("head")[0].appendChild(fileref);

显然,请确保您可以通过resource://协议访问您的css。