我遇到一些問題,推遲JavaScript。從Google's docs約defering JS,我發現下面的代碼,編輯我的需求:推遲與jQuery的問題和版本的JavaScript
<script type='text/javascript'>
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js";
document.body.appendChild(element);
var element2 = document.createElement("script");
element2.src = "jquery.validate.js";
document.body.appendChild(element2);
var element3 = document.createElement("script");
element3.src = "fancybox/jquery.fancybox.pack.2.1.4.js";
document.body.appendChild(element3);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
該代碼添加3個.js文件的頁面,他們在檢查中顯示。現在的問題是,我有更多的代碼我的網頁上,使用jQuery &的谷歌分析
<script type='text/javascript'>
$(document).ready(function(){
//some code
});
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '*********']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
現在,我已經把我所有的代碼放到//some code
部分,所以代碼初始化的fancybox並添加事件偵聽器。現在我得到的一個問題是刷新時,有時我得到Uncaught ReferenceError: jQuery is not defined
。我只能假設這是因爲其他文件在jQuery文件之前加載。我應該如何解決這個問題?
此外,main.js
(頁面上需要的所有其他js代碼的.js文件)中的代碼是否仍然需要在$(document).ready(function(){...});
之內? 我曾經在我的代碼之間放置了大量的javascript,所以如果不需要將它發送到頁面,但我想用外部.js文件可能會因爲可以緩存而受益。
而且在旁註:apparantly使用bar.js?v=1.0
爲版本是BAD(根據薩爾瓦多goog,因爲當時一些代理的不要緩存它),所以最好的方法是經常改變的文件名,例如: bar.1.0.js
?當你調用「$(文件)。就緒(函數(){」,因爲它沒有包括在本頁面可以解決未加載
我明白你的意思,但我所有的代碼目前在一個外部的.js文件中,我無法將var元素傳遞給它。問題是我需要在JQuery之後的所有其他文件中加載,並且最好不用爲此編輯所有外部文件,因爲這些文件可以經常更新。 – jdepypere 2013-04-21 01:06:45
對不起,我誤解了你的問題。我編輯了我的答案。 – mkdevoogd 2013-04-21 01:38:30
整潔,似乎很好地工作!謝謝! – jdepypere 2013-04-21 11:58:00