【问题标题】:Dynamic jquery loading not working on old IE动态 jquery 加载在旧 IE 上不起作用
【发布时间】:2013-04-10 15:32:17
【问题描述】:

这适用于现代浏览器,但它不能在 IE

下面是 index.html 文件中的代码:

loadJQuery(function () {
    alert('hello');
});

然后在另一个文件(通过<script src> 包含)我有:

    if (typeof(loadJSInclude) == 'undefined') {
 function loadJSInclude(scriptPath, callback)
 {
   var scriptNode = document.createElement('SCRIPT');
   scriptNode.type = 'text/javascript';
   scriptNode.src = scriptPath;

   var headNode = document.getElementsByTagName('HEAD');
   if (headNode[0] != null)
      headNode[0].appendChild(scriptNode);

   if (callback != null)    
   {
     scriptNode.onreadystagechange = callback;            
     scriptNode.onload = callback;
   }
 }

 function loadJQuery(task) {
    if (typeof(jQuery) == "undefined") {
        loadJSInclude('http://code.jquery.com/jquery-latest.min.js', function() {
            $(document).ready(task)
        });
    } else {
        $(document).ready(task);
    }
 }
}

知道为什么这在 IE

【问题讨论】:

  • 不要在if块中使用这种类型的函数声明,使用window.loadJSInclude=function...
  • 怎么样?我真的不明白:(

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


【解决方案1】:

您忘记了$(document).ready(task) 末尾的;

请注意,这可能不是真正的问题,因为 JS(技术上)不需要分号,但它可能会导致问题,尤其是在处理动态内容时。

另外,'undefined'"undefined" 不需要引号。


(因对OP的误解而删除) 至于你的实现,见this post


你试过设置scriptNode.async = true吗?

另外,你见过this post吗?没有可接受的答案,但 OP 指定了一个在 IE(但不是 Chrome)中有效的解决方案。我建议您尝试调整该解决方案,测试它是否仍然无法在 Chrome 中运行,如果没有,我们可以从那里继续调试。这是帖子中的 IE8 解决方案:

<div id="test">
<p>This is a test.</p>
</div>

<script>
if (typeof jQuery == 'undefined') {
    s = document.createElement("script");
    s.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
    if (s.addEventListener) {
        s.addEventListener("load", runScript, false);
    } else if (s.readyState) {
        s.onreadystatechange = runScript;
    }

} else {
    runScript();
}

function runScript() {
    document.getElementsByTagName('head')[0].appendChild(s);
    $('#test').css('font-size', '50px');

}
</script>

正如我所说,我没有写这个,我自己也没有测试过。

【讨论】:

  • 我认为您根本没有理解这个问题,该帖子也无济于事,因为它使用 jquery 加载 javascript,这里的问题是首先加载 jquery。
  • 正如我所说,这些小错误可能不是实际问题的根源,但您需要在我们继续之前修复它们,因为当其中已经存在错误时我无法调试代码。此外,在这种情况下,否决我的答案并不是获得我帮助的好方法,也不是对我的答案的准确评估,因为我的答案确实解决了您代码中的三个错误。现在,似乎没有其他人在帮助您,而我参与 SO 的原因是为了加强社区,我将继续帮助您。因此,感谢您确认这些错误不是问题所在。我们现在可以继续前进了。
  • 我没有对你投反对票,我只是在回复你的帖子,我非常感谢你的帮助,但我不能撒谎告诉你问题已经解决了 :)
  • 我实际上对此并没有太大的信心。默认情况下是隐式设置的,但最好先排除简单的情况。
【解决方案2】:

一个简单的解决方案是像这样包含 jQuery:

window.jQuery || document.write('<script src="/js/jquery/jquery.js">\x3C/script>');

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 2012-06-09
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多