【问题标题】:IE9 js load order and JQueryIE9 js加载顺序和JQuery
【发布时间】:2011-11-02 23:04:18
【问题描述】:

这似乎是一个容易解决的问题,但它让我很头疼。

以下简单示例在 IE9 中产生错误。我使用 IE9 的开发者页面来监控网络加载,看起来 IE 在加载/评估包含的 javascript 之前加载并执行主体脚本。

我已经尝试了通过搜索答案找到的所有各种技巧,包括添加 <meta charset="UTF-8" /><meta http-equiv="x-ua-compatible" content="IE8"/>

<html>
<head>
  <title>Demo of IE suckiness</title>
  <script type='text/javascript' 
      src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
  </head>
  <body>
This works in every browser but not IE9. IE gives the error:
<pre>
Line: 9
Error: The value of the property '$' is null or undefined, not a Function object
</pre>

<script type="text/javascript" defer="defer">
$(document).ready(function(){
  alert("Must not be IE");
});
</script>
</body>
</html>

我有一个变通办法。将准备好的脚本移动到&lt;body onload="ready()"&gt;,但我不敢相信这对 IE9 来说是坏的,我一定是做错了什么,只是看不到它。

【问题讨论】:

  • 你为什么使用“延迟”? $(document).ready 表示将在文档加载时执行。
  • 你能验证 jquery 库正在下载吗?也许ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js 因某种原因被屏蔽了。
  • 我确认它正在被下载。问题是在运行页面脚本之前它没有被加载。 “延迟”是让它不首先加载的疯狂尝试。我只是没有意义。下面的解决方案是重置我的所有 IE 设置。我必须更改安全设置或什么? IE 会下载但不加载 JQuery 是没有意义的。

标签: jquery internet-explorer internet-explorer-9


【解决方案1】:

据我所知,IE9 仅在加载整个文档(包括所有图像和相关内容)时才会触发 $.load()。可怕但真实!我的解决方法:

            var docReady = {
                actions:new Array(),
                flag:0,
                time:0,
                period:10,
                trigger:function() {this.flag=1},
                checkHandle:0,
                check:function() {
                    this.time+=this.period;
                    if(this.flag) {
                        clearInterval(this.checkHandle);
                        for(i in this.actions) {this.actions[i]();}
                    }
                },
                watch:function() {
                    this.checkHandle = setInterval(function() {docReady.check();},this.period);
                },
                action:function(f) {
                    this.actions.push(f);
                }

            };

            docReady.watch();

确实很脏,但它正在工作;现在,只要您认为合适,您就可以调用 docReady.trigger() 并且至少应该在页面末尾执行此操作。此外,您可以将其称为 body onload。保证您使用 docReady.action() 添加的函数只会运行一次:当第一次 trigger() 发生时。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我通过resetting all my IE9 settings修复了它。
    我认为通过提高安全性或隐私性,它可以破坏从外部页面加载 jquery。

    【讨论】:

    • 哇。好的。那行得通!你怎么知道要试试?我已经花了好几个小时了。自然,我在本地服务器(localhost)上运行它并尝试从 localhost 路径加载 jquery,但没有任何效果。
    【解决方案3】:

    您是否尝试忽略defer="defer"

    【讨论】:

    • 如果这是一个答案,为什么它是一个问题? :D
    • 感谢您的想法。我确实尝试过这种组合。
    【解决方案4】:

    我遇到了同样的问题,并通过不使用 Google 托管的 jQuery 并在本地托管它来解决它。

    【讨论】:

    • 问候詹姆斯。欢迎来到 Stackoverflow。您可以为已经回答的问题提供答案。没问题。精神是在社区成员之间分享不同的经验。花点时间阅读常见问题解答。
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多