为什么Javascript有时在IE8中无法加载

9
我有一些外部 JavaScript 文件在我的主页面中加载。
有时在 IE8 中,我的 JavaScript 文件不会正确加载,并且浏览器会抛出一堆 JavaScript 错误,称'对象未被识别'。
如果我刷新页面,那么一切都正常。如果我点击链接,则问题有时会再次发生。
我在头部添加了清除每个请求缓存的元标记。我正在使用 head.load 库以并行方式加载我的 js 文件。
head.load 库位于我的页眉中,而外部文件位于我的正文末尾。
请记住,这个问题只在 IE8 中发生。那么我的问题是......有没有什么方法可以解决每次加载页面时确保我的 JavaScript 文件在 IE8 中正确加载?
非常感谢您的帮助。
<head runat="server">
    <meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />
    <meta http-equiv="PRAGMA" content="NO-CACHE" />
    <meta http-equiv="EXPIRES" content="-1" />
    <script type="text/javascript" src="scripts/js/head.load.min.js"></script>
</head>
<body>
<script type="text/javascript">
    head.js("scripts/js/jquery-1.6.2.min.js");
    head.js("scripts/js/jquery.cookie.js");
    head.js("lib/gritter/jquery.gritter.min.js");
    head.js("lib/fancybox/jquery.easing-1.3.pack.js");
    head.js("lib/fancybox/jquery.fancybox-1.3.4.pack.js");
    head.js("scripts/js/jquery.microaccordion.js");
    head.js("scripts/js/jquery.stickyPanel.js");
    head.js("scripts/js/guidely.js");
    head.js("scripts/js/pto.js");
</script>
</body>

抛出一堆错误,说对象未被识别。具体说明会更有帮助。 - Shad
@Shad - "objects not recognized" 的意思是我在应用程序中使用的对象没有找到它们应该加载的外部 JavaScript 文件,在 IE8 中也没有在页面加载时加载。请原谅我,我以为这很容易理解。 - damaniel
@Frederic - 我已在IE9、Chrome、Safari和Firefox上进行了测试。虽然没有在Opera上测试,但我不关心Opera,因为这是一个内部网站。我关心IE,因为那是我们的标准。我已经在大约10台其他机器上尝试过了。我正在使用http://headjs.com/,在IE8中它似乎有时无法加载文件。我不确定您所说的在安全模式下运行它是什么意思,因为这是一个Web应用程序。 - damaniel
@damaniel,确实,我的意思是在安全模式下运行浏览器,以防安装的插件干扰您的请求。 - Frédéric Hamidi
我想我也表达得太模糊了。如果错误是关于“head”的“ReferenceError”,那么这个错误就与jQuery fancybox抱怨找不到jQuery非常不同。 - Shad
显示剩余2条评论
2个回答

2
好的,问题似乎出在head.load库在IE8中如何加载我的外部文件上。如果我在加载head.load库之前先加载jquery,并且在页面末尾并行加载我的外部文件,则不会出现JavaScript错误。对于JavaScript加载和IE8,我学到了一些小课程。
感谢大家的建议。
@frederic - 我在一家拥有188,000名员工的公司工作。如果用户安装了一个导致我的页面崩溃的附加组件,那么我无能为力。我也不认为这个问题是由任何附加组件引起的。只是head.load库在IE8中的处理方式不同。
<head runat="server">
    <meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />
    <meta http-equiv="PRAGMA" content="NO-CACHE" />
    <meta http-equiv="EXPIRES" content="-1" />
    <script type="text/javascript" src="scripts/js/jquery.min.js"></script>
    <script type="text/javascript" src="scripts/js/head.load.min.js"></script>
</head>

<script type="text/javascript">
    head.js("scripts/js/jquery.cookie.js");
    head.js("lib/gritter/jquery.gritter.min.js");
    head.js("lib/fancybox/jquery.easing-1.3.pack.js");
    head.js("lib/fancybox/jquery.fancybox-1.3.4.pack.js");
    head.js("scripts/js/jquery.microaccordion.js");
    head.js("scripts/js/jquery.stickyPanel.js");
    head.js("scripts/js/guidely.js");
    head.js("scripts/js/pto.js");
</script>

1
嗨,我不想失礼,但是你的回答可能有助于解决你特定的问题,但实际上并没有解决关于deps和headjs的一般性问题,请考虑阅读我的回答,或者在你的回答下添加评论。 - Jorge E. Cardona

0

在页面 http://headjs.com/ 的使用部分,您将会看到您的代码存在什么问题:

// 文件并行加载并按照到达顺序执行 head.js("file1.js"); head.js("file2.js"); head.js("file3.js");

您的脚本正在并行加载并按照到达时间执行,这对于依赖于jquery的deps来说非常糟糕,如果您想要它们按顺序执行,请使用以下代码:

head.js("scripts/js/jquery-1.6.2.min.js",
        "scripts/js/jquery.cookie.js",
        "lib/gritter/jquery.gritter.min.js"),
        "lib/fancybox/jquery.easing-1.3.pack.js",
        "lib/fancybox/jquery.fancybox-1.3.4.pack.js",
        "scripts/js/jquery.microaccordion.js",
        "scripts/js/jquery.stickyPanel.js",
        "scripts/js/guidely.js",
        "scripts/js/pto.js");

你需要使用一个资源列表来调用js进行加载,而不是多次调用js。


你所提到的文档在一年前我遇到这个问题时并不可用,而且我相当确定加载逗号分隔的外部文件也不是 headjs 的功能...但现在你可以做到这一点真的很酷...感谢你的建议。 - damaniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接