すでに同様の投稿がありますが、私の特定の質問に十分に答えているとは思いません。
外部スタイルシートが読み込まれたことを確認したい。たとえば、ネットワークの問題によって妨げられている場合は、フォールバックを知り、ロードしたいと考えています。これは、jQuery のテーマ CSS の CDN のフォールバックとしてのものですが、これを適用したい他の外部 CSS を使用しているため、これが特にそれについてであることにはならないようにしたいと思います。
- 参照
link
要素はページ上に存在するため、head 内の link 要素の存在に対するパターン マッチングは受け入れられません。 - スタイルシートの CSS を変更する機能がないため、ダミーの CSS を追加することはできません。
- 私は外部スタイルシートの CSS を制御できないため、CSS の既存のクラスに依存するのは脆弱です。別の解決策があればいいのですが。
- タイムアウトを使用する唯一の方法ですか? どのくらいの期間設定すればよいですか?時間を測定するには、どのイベントを選択すればよいですか?
- 私は純粋なjavascript、次にjQueryを好みますが、他のjavascriptフレームワークに対する回答は、間違いなく誰かに役立つため、受け入れられます。
編集:新しい考え。スタイルシートが AJAX 経由で読み込まれ、ステータス コードがチェックされた場合はどうなるでしょうか。それは実行可能なオプションですか、誰か知っていますか?
これが私が現在持っているスクリプトです:
<script type="text/javascript">
var cdn = 'http://code.jquery.com/ui/1.10.1/themes/black-tie/jquery-ui.min.css';
var ss = document.styleSheets;
for (var i = 0, max = ss.length; i < max; i++) {
var sheet = ss[i];
var rules = sheet.rules ? sheet.rules : sheet.cssRules;
if (sheet.href == cdn) {
if ( rules == null || rules.length == 0) {
var link = document.createElement("link");
link.rel = "stylesheet";
link.href = '/js/jquery-ui/1.10.1/themes/black-tie/jquery-ui.min.css';
document.getElementsByTagName("head")[0].appendChild(link);
}
break;
}
}
</script>
コンソール (Chrome v25.0.1364.172) を使用してわかったことは、スタイルシートが CDN から読み込まれた場合でもdocument.styleSheets[x].rules
、null
. コンソールで正しくアクセスしているかどうかはわかりませんが、使用または反対すべき別の機能があるのではないでしょうか?
CSSStyleSheet {rules: null, cssRules: null, ownerRule: null, media: MediaList, title: null…}
cssRules: null
disabled: false
href: "http://code.jquery.com/ui/1.10.1/themes/black-tie/jquery-ui.min.css"
media: MediaList
ownerNode: link
ownerRule: null
parentStyleSheet: null
rules: null
title: null
type: "text/css"
__proto__: CSSStyleSheet
スタイルシートが読み込まれたことを確認する方法を誰かが見つけてくれれば、それは非常に役に立ち、非常にありがたいです。