尝试将规则添加到CSS样式表会在Firefox中显示"操作不安全"

Met*_*ger 13 javascript css firefox greasemonkey stylesheet

我正在使用Greasemonkey并尝试在特定域中添加规则.但它导致错误说The operation is insecure.
该代码在Chrome上正常运行.

该脚本运行http://mydomain.com/test/test.php
并且CSS文件是http://cdn.mydomain.com/test/css/global.css

我的功能:

function css(selector, property, value) {
    for (var i=0; i<document.styleSheets.length;i++) 
    {
        try 
        { 
            document.styleSheets[i].insertRule(selector+ ' {'+property+':'+value+'}', document.styleSheets[i].cssRules.length);
        } 
        catch(err) 
        { 
            try // IE
            { 
                document.styleSheets[i].addRule(selector, property+':'+value);
            } 
            catch(err) {}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在谷歌上我发现可能是因为我试图访问跨域,所以我尝试将CS​​S文件的URL添加到"接受的URL"但没有结果.

我该如何解决?

Gre*_*ent 5

我发现这个解决方案可以解决这个问题:

var style = document.createElement("style");
document.head.appendChild(style);
style.sheet.insertRule("body { font-size:40px; }", 0);
Run Code Online (Sandbox Code Playgroud)


Bro*_*ams 4

是的,Firefox 会阻止对跨域样式表的访问。它可以(或至少用来)抛出异常:

“访问受限 URI 被拒绝”代码:“1012”
nsresult:“0x805303f4(NS_ERROR_DOM_BAD_URI)”
位置:……


但是,使用 CSS,您无需向特定样式表添加规则。只需覆盖您关心的样式即可。

例如,如果页面设置:

body {
    background: white;
}
Run Code Online (Sandbox Code Playgroud)

你的脚本设置:

body {
    background: red;
}    
Run Code Online (Sandbox Code Playgroud)

然后页面将变成红色(名义上)。

有关更改目标页面样式的最简单、最明智的方法,请参阅以前的答案,例如这个