0

我是新成熟階段的項目。其中一個頁面上有許多JS腳本和庫,jQuery被大量使用。在IE7/8中只有一個奇怪的錯誤:在頁面腳本執行過程中的某個地方,jQuery對象變得不確定,所以其他的東西都停止工作。Internet Explorer中的JavaScript調試(頁面上的所有腳本)

有在HTML的中間指定了兩個劇本,說,像這樣:

<script src="script1.js"></script> 
<script src="script2.js"></script> 

script1一個名爲jQuery變量包含預期的對象的末尾,但在script2的開始變量jQuery已經是未定義的。之間會發生什麼?

請任何想法在哪裏看,如何調試!

有沒有辦法控制腳本執行的順序並調試整個後續js(包括所有js包括)在一個頁面上?

謝謝! :)

UPDATE。我做了一個補丁:在script1我備份結束變量:

var jQueryBackup = jQuery; 

script2初,我恢復它:

if (!jQuery && jQueryBackup) jQuery = jQueryBackup; 

它使腳本工作,但並不能說明在兩個腳本之間怎麼會變成一個未定義的變量(我在兩行代碼之間直接看到它)。

+0

不能幫助你(此解決方案能夠IE8 +,火狐,Chrome瀏覽器)無碼... – IdanHen 2013-03-21 08:18:23

回答

0

你的<script>在HTML中間?儘量把它們放進<head>

<head> 
    <script src="script1.js"></script> 
    <script src="script2.js"></script> 
</head> 
+0

有什麼區別? – 2013-03-22 02:10:23

+0

JS是一種解釋型語言。瀏覽器一行一行地執行。如果它在或中,則它不具有相同的比例。 – 2013-03-22 07:53:44

0

,如果你要調試,這是我會做:

$.getScript("script1.js").done(function(script, textStatus) { 
    console.log('script1 is loaded'); 
    $.getScript("script2.js").done(function(s,t){ 
    console.log('script1.js is loaded'); 
    }); 
}) 
.fail(function(jqxhr, settings, exception) { 
    console.log("Triggered ajaxError handler."); 
}); 

現在你可以調試它,你也可以使用原生的JavaScript和使用的onload。
如果您需要示例,請告訴我。

例如:

function handleOnLoad() { 
    // do the same here for the script.2 file 
} 
function IEhandleOnLoad() { 
    if (this.readyState === 'complete' || this.readyState === 'loaded') { 
      handleOnLoad(); 
     } 
} 
var s = document.createElement('script'); 
s.type = 'text/javascript'; 
s.async = true; 
s.onreadystatechange = IEhandleOnLoad; 
s.onload = handleOnLoad; 
s.src = 'script1.js'; 
+0

是的,請舉個例子吧! – 2013-03-22 02:13:01

相關問題