2012-09-02 11 views
3

CDN-hosted jQuery加載到fallback to a local file是一種很好的做法。例如。 HTML5 Boilerplate是這樣的:如何在XHTML中添加jQuery CDN回退?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script> 

但是,如何在XHTML中執行相同的操作?由於document.write()在適當的XHTML中不起作用(以application/xhtml+xml發送),是否有替代方法?

+1

爲什麼使用XHTML? –

回答

3

這段代碼創建一個新的<script/>元素,並在頁面上第一<script/>元素之前追加它的時候:

if (!window.jQuery) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'js/vendor/jquery-1.8.0.min.js'; 

    var firstScript = document.getElementsByTagName('script')[0]; 
    firstScript.parentNode.insertBefore(script, firstScript); 
} 
+0

太好了,謝謝!這正是我所期待的。 – selfthinker

0

createElementsetAttributeappendChild按通常更換document.writeinnerHTML

0

擴展在馬克西姆六。的回覆中,我更接近原來的想法,將其插入所稱的地方:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
<script type="text/javascript" id="jQuery"> 
if (!window.jQuery) { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = '/js/jquery-1.8.0.min.js'; 
    var jQueryScript = document.getElementById('jQuery'); 
    jQueryScript.parentNode.insertBefore(script, jQueryScript); 
} 
</script> 

這樣,您可以將腳本保留在頁腳中(如果頁面中有其他腳本,則不會太早或在不同位置插入腳本)。

編輯:我在使用該解決方案的某些瀏覽器中遇到了問題,但將id="jQuery"向下移動可解決此問題。我相應地調整了代碼。

相關問題