13

私は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) {}
        }
    }
}

Googleで、クロスドメインにアクセスしようとしていることが原因である可能性があることがわかったため、CSSファイルのURLを「承認されたURL」に追加しようとしましたが、結果は得られませんでした。

これを修正するにはどうすればよいですか?

4

3 に答える 3

5

私はこの解決策が問題を回避することを発見しました:

var style = document.createElement("style");
document.head.appendChild(style);
style.sheet.insertRule("body { font-size:40px; }", 0);
于 2015-04-23T20:32:35.793 に答える
4

はい、Firefoxはクロスドメインのスタイルシートへのアクセスをブロックします。例外をスローできます(または少なくとも使用されます)。

「制限されたURIへのアクセスが拒否されました」コード:「1012」
nsresult:「0x805303f4(NS_ERROR_DOM_BAD_URI)」
場所:.....。


ただし、CSSを使用すると、特定のスタイルシートにルールを追加する必要はありません。気になるスタイルを上書きするだけです。

たとえば、ページが次のように設定されている場合:

body {
    background: white;
}

そして、スクリプトセット:

body {
    background: red;
}    

その後、ページは(名目上)赤になります。

ターゲットページのスタイルを変更する最も簡単で賢い方法については、このような以前の回答を参照してください。

于 2013-03-05T20:41:09.607 に答える
2

スタイルシートのルールは、さまざまな方法でそのスタイルシートの権限で実行されます。つまり、クロスサイトスタイルシートにルールを挿入できれば、クロスサイト攻撃を実行できるということです。これが、Firefoxがクロスサイトスタイルシートへのルールの追加をブロックする理由です。

Chromeは、代わりにリンクドキュメントの権限ですべてのルールを実行する可能性があります。そのため、シートに追加することができます。ただし、Chromeではクロスサイトスタイルシートを読み取ることができないことに注意してください。

CORSを使用してスタイルシートをロードすると(に「crossorigin」属性を設定し<link>、CDNが正しいヘッダーを提供していることを確認することにより)、クロスサイトアクセスを取得できることに注意してください。

于 2013-03-05T20:36:35.923 に答える