0

我是成熟阶段项目的新手。其中一页有很多 JS 脚本和库,jQuery 被密集使用。仅在 IE7/8 中存在一个奇怪的错误:在页面脚本执行的中间某处 jQuery 对象变得未定义,因此其他一切都停止工作。

在 HTML 中间指定了两个脚本,比如说,像这样:

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

script1一个变量调用的末尾jQuery包含一个预期的对象,但在script2变量的开头jQuery已经是未定义的。中间会发生什么?

请,任何想法在哪里寻找以及如何调试!

有没有办法控制脚本执行的后果并在一页上调试整个后果js(包括所有js包括)?

谢谢!:)

更新。我做了一个补丁:最后script1我备份了变量:

var jQueryBackup = jQuery;

script2我恢复它的开头:

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

它使脚本工作,但没有解释变量如何在两个脚本之间变得未定义(我认为它实际上是在两行代码之间)。

4

2 回答 2

0

<script>在 HTML 中间吗?尝试将它们放入<head>

<head>
    <script src="script1.js"></script>
    <script src="script2.js"></script>
</head>
于 2013-03-21T08:04:47.963 回答
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。
如果您需要示例,请告诉我。

示例:(此解决方案适用于 IE8+、firefox、chrome)

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';
于 2013-03-21T08:21:58.317 回答