2013-01-03 65 views
12

截至目前我使用這樣的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加載本地副本服務器掛了。?

+4

我只是假設,如果js不見了,css可能也沒有了。 –

+0

您使用服務器端腳本嗎?你可以根據boolean(true | false)結果做一個http請求和一個簡單的if語句。因此,您可以將本地版本設置爲默認故障轉移。 –

+0

@KevinB好點。謝謝 – Giri

回答

15

我對這個解決方案是讓使用引導隱藏類樣式在機身頂部的空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> 
1

會對文件執行jquery.Get()工作嗎? 根據結果,你會知道它是否可用。 而且看到它發生在客戶端,本地緩存將使這成爲額外帶寬的一個非問題。

1

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,你應該是好

+0

使用'片[「cssRules」] '來自另一個域的CSS文件是跨域訪問,這被認爲是一個安全問題。 Chrome不允許它,並且Firebug拋出一個錯誤。 –

0

試試這個,

<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> 

Source

相關問題