コードは次のとおりです。
alert(document.styleSheets[x].cssRules.length)
「セキュリティ例外」で失敗することに気付くでしょう。これに対する回避策。この機能を使用して CSS ドキュメントが読み込まれているかどうかを検出する「CSS 遅延読み込み」クラスがいくつかあるため、質問しています。
また、セキュリティ例外は正しい動作ですか/標準に準拠していますか?
コードは次のとおりです。
alert(document.styleSheets[x].cssRules.length)
「セキュリティ例外」で失敗することに気付くでしょう。これに対する回避策。この機能を使用して CSS ドキュメントが読み込まれているかどうかを検出する「CSS 遅延読み込み」クラスがいくつかあるため、質問しています。
また、セキュリティ例外は正しい動作ですか/標準に準拠していますか?
別のドメインまたはサーバーからロードされたスタイルシートを読み取ろうとした場合、または@importルールを読み取ろうとした場合に、このエラーが発生する可能性があります。
目的については、document.styleSheets.lengthを確認してください。
2013 年以降、<link> 要素に「crossorigin」属性を設定して、この CSS が信頼されていることをブラウザーに知らせることができます ( https://developer.mozilla.org/en-US/docs/Web/HTML/Element /リンク)。
その後、Javascript を介してそのルールにアクセスできます。
別のドメインからcssファイルを読み込んでいます。外部から読み込まれたcssファイルのcssRulesを変更することは許可されていないと思います。
これを参照してください:.cssRulesを使用したクロスドメインスタイルシートへのアクセス
条件を試してください: (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
cssRules
スタイルシートはそこにあり、正常に動作します。ブラウザによって null に設定されているため、スタイルシートのプロパティにアクセスできません。
発生するセキュリティ エラーは、同じオリジン ポリシーによるものです。別のドメインのスタイルシートで作業しています。スタイルシートが Web ページと同じドメインでホストされている場合、この問題は発生しません。
失敗した行を try-catch ブロックに入れることができます。それが私が1つのプロジェクトで同じ問題を解決した方法です。
window.document.styleSheets[x].cssRules.length
の代わりに試してくださいdocument.styleSheets[x].cssRules.length
。セキュリティ例外なしでFirefoxで動作します。