0

这适用于现代浏览器,但它没有在 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 元素中。

4

2 回答 2

0

你忘记了;结尾的$(document).ready(task)

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

此外,'undefined'并且"undefined"不需要引号。


(由于对OP的误解而删除) 至于您的实现,请参见this post


你试过设置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>

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

于 2013-04-10T15:41:47.943 回答
0

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

window.jQuery || document.write('<script src="/js/jquery/jquery.js">\x3C/script>');
于 2013-04-12T02:22:46.503 回答