13

コードは次のとおりです。

alert(document.styleSheets[x].cssRules.length)「セキュリティ例外」で失敗することに気付くでしょう。これに対する回避策。この機能を使用して CSS ドキュメントが読み込まれているかどうかを検出する「CSS 遅延読み込み」クラスがいくつかあるため、質問しています。

また、セキュリティ例外は正しい動作ですか/標準に準拠していますか?

4

7 に答える 7

7

別のドメインまたはサーバーからロードされたスタイルシートを読み取ろうとした場合、または@importルールを読み取ろうとした場合に、このエラーが発生する可能性があります。

目的については、document.styleSheets.lengthを確認してください。

于 2011-03-16T10:20:30.027 に答える
5

2013 年以降、<link> 要素に「crossorigin」属性を設定して、この CSS が信頼されていることをブラウザーに知らせることができます ( https://developer.mozilla.org/en-US/docs/Web/HTML/Element /リンク)。

その後、Javascript を介してそのルールにアクセスできます。

于 2013-09-17T14:40:35.627 に答える
1

別のドメインからcssファイルを読み込んでいます。外部から読み込まれたcssファイルのcssRulesを変更することは許可されていないと思います。

これを参照してください:.cssRulesを使用したクロスドメインスタイルシートへのアクセス

于 2011-03-16T10:12:33.053 に答える
1

条件を試してください: (IE の回避策)

function aftermath(index) {
    var css = document.styleSheets[index].rules || document.styleSheets[index].cssRules;
    alert(css.length);
}

これはエラーを与えています:

aftermath(document.styleSheets.length - 1);

0 に設定すると、すべて正常に動作します...問題は、この時点で css の準備ができていないことです。アクセスする必要がある場合は、すぐにアクセスする必要があります。

最終編集:

CSS をソースから最新の状態に保ちたい場合は、php プロキシを使用してロードできます。

<?php
$name = 'http://ajax.googleapis.com/ajax/libs/jqueryui/$_GET[version]/themes/$_GET[theme]/jquery-ui.css';
$fp = fopen($name, 'rb');
fpassthru($fp);
exit;
?>

次に、たとえばを使用して取得できます/proxy.php?version=1.7.0&theme=humanity

于 2011-03-16T10:17:22.057 に答える
1

cssRulesスタイルシートはそこにあり、正常に動作します。ブラウザによって null に設定されているため、スタイルシートのプロパティにアクセスできません。

発生するセキュリティ エラーは、同じオリジン ポリシーによるものです。別のドメインのスタイルシートで作業しています。スタイルシートが Web ページと同じドメインでホストされている場合、この問題は発生しません。

于 2011-03-16T10:23:38.950 に答える
0

失敗した行を try-catch ブロックに入れることができます。それが私が1つのプロジェクトで同じ問題を解決した方法です。

于 2015-04-23T12:48:50.607 に答える
-2

window.document.styleSheets[x].cssRules.lengthの代わりに試してくださいdocument.styleSheets[x].cssRules.length。セキュリティ例外なしでFirefoxで動作します。

于 2015-12-16T13:04:47.247 に答える