动态jquery加载不适用于旧IE

时间:2013-04-10 15:32:18

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

这适用于现代浏览器,但它不会在IE< = 9.0上加载jQuery。

以下是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&lt; = 9.0的任何想法?我尝试向loadJQuery函数添加许多警报,它们都在显示,我的猜测是我错误地将节点添加到旧IE的head元素中。

2 个答案:

答案 0 :(得分:0)

您忘记了;末尾的$(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>

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

答案 1 :(得分:0)

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

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