动态jquery加载不工作在旧的IE

Dynamic jquery loading not working on old IE

本文关键字:IE 工作 jquery 加载 动态      更新时间:2023-09-26

这可以在现代浏览器上运行,但不能在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 <= 9.0上工作吗?我尝试向loadJQuery函数添加许多警报,并且它们都显示,我的猜测是我错误地将节点添加到旧ie的head元素。

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

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

同样,'undefined'"undefined"不需要引号。


(由于对OP的误解而删除)关于您的实现,请参阅这篇文章


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

还有,你看过这篇文章吗?没有公认的答案,但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:

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