截至目前我使用這樣的JavaScript如何在cdn服務器關閉時加載bootstrap css的本地副本?
我加載bootstrap.css從bootstrapcdn這樣
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel="stylesheet">
誰能告訴我怎樣,如果CDN加載本地副本服務器掛了。?
截至目前我使用這樣的JavaScript如何在cdn服務器關閉時加載bootstrap css的本地副本?
我加載bootstrap.css從bootstrapcdn這樣
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel="stylesheet">
誰能告訴我怎樣,如果CDN加載本地副本服務器掛了。?
我對這個解決方案是讓使用引導隱藏類樣式在機身頂部的空div:
<div id="bootstrapCssTest" class="hidden"></div>
然後使用JavaScript後來測試它,並將它添加到頭部,如果格是可見的:
<script type="text/javascript">
if ($('#bootstrapCssTest').is(':visible') === true) {
$('<link href="/localcopy/css/bootstrap.css" rel="stylesheet" type="text/css" />').appendTo('head');
}
</script>
會對文件執行jquery.Get()工作嗎? 根據結果,你會知道它是否可用。 而且看到它發生在客戶端,本地緩存將使這成爲額外帶寬的一個非問題。
This gist具有一個代碼段,我發現,用於檢測需要加載一個CSS後備特別有用。
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" />
<script type="text/javascript">
function cssLoaded(href) {
var cssFound = false;
for (var i = 0; i < document.styleSheets.length; i++) {
var sheet = document.styleSheets[i];
if (sheet['href'].indexOf(href) >= 0 && sheet['cssRules'].length > 0) {
cssFound = true;
}
};
return cssFound;
}
if (!cssLoaded('bootstrap-combined.min.css')) {
local_bootstrap = document.createElement('link');
local_bootstrap.setAttribute("rel", "stylesheet");
local_bootstrap.setAttribute("type", "text/css");
local_bootstrap.setAttribute("href", "/Content/Styles/bootstrap-combined.min.css");
document.getElementsByTagName("head")[0].appendChild(local_bootstrap);
}
</script>
只是用正確的路徑替換/Content/Styles/bootstrap-combined.min.css
到本地的CSS,你應該是好
使用'片[「cssRules」] '來自另一個域的CSS文件是跨域訪問,這被認爲是一個安全問題。 Chrome不允許它,並且Firebug拋出一個錯誤。 –
試試這個,
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
<script>
function cssLoaded(href) {
var cssFound = false;
for (var i = 0; i < document.styleSheets.length; i++) {
var sheet = document.styleSheets[i];
if (
sheet['href'] == "http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" ||
sheet['href'] == "https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css") {
cssFound = true;
}
};
return cssFound;
}
if (!cssLoaded('bootstrap.min.css')) {
local_bootstrap = new CustomEvent('link');
local_bootstrap.setAttribute("rel", "stylesheet");
local_bootstrap.setAttribute("href", "/css/bootstrap.min.css");
document.getElementsByTagName("head")[0].appendChild(local_bootstrap);
}
</script>
我只是假設,如果js不見了,css可能也沒有了。 –
您使用服務器端腳本嗎?你可以根據boolean(true | false)結果做一個http請求和一個簡單的if語句。因此,您可以將本地版本設置爲默認故障轉移。 –
@KevinB好點。謝謝 – Giri