为什么Javascript有时不会在IE8中加载

时间:2012-02-20 19:07:26

标签: javascript internet-explorer-8

我有外部javascript文件加载到我的母版页中。

有时在IE8中我的javascript文件没有正确加载,浏览器会抛出一堆错误,说明对象无法识别。

如果我刷新页面,那么一切正常。如果我点击链接,则有时会再次出现问题。

我的标题中有元标记,用于清除每个请求的缓存。

另外我使用head.load来并行加载我的js文件。

head.load脚本在我的标题中,然后外部文件在我的身体末尾。

请记住,此问题仅发生在IE8中。所以我的问题是..是否有一个黑客,我可以用来确保每次加载IE8页面时我的javascript文件都正确加载?

非常感谢任何帮助。

根据要求更新了

<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>

2 个答案:

答案 0 :(得分:2)

好的问题似乎是head.load文件如何在IE8中加载我的外部。如果我在加载head.load文件之前加载jquery,然后在页面末尾并行加载我的外部,那么它们在页面上没有错误。

这绝对是一个解决方案,但我希望即使是jquery也可以加载到头部而不会在IE中出现javascript错误。我确信在后面的版本中这不会出错。

谢谢大家的意见。

@ frederic - 我在一家拥有188,000名员工的公司工作。如果他们的浏览器中安装了一个导致我的页面崩溃的插件,那么我无能为力。我也不认为这个问题是由任何添加引起的。我认为它是如何在IE8中处理head.load的。

@Shard - 我认为你不明白我在问什么,如果是这样,那么我很抱歉没有更清楚。无论如何,我找到了一个解决方案,谢谢你的意见。

<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 :(得分: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。

相关问题