0

这是在现代浏览器上工作,但它不是在IE < = 9.0上加载jQuery。动态jquery加载不工作在旧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 < = 9.0?我尝试添加许多警报来loadJQuery函数,并且它们都显示,我的猜测是我错误地将节点添加到旧IE的head元素。

+0

不要在'if'块使用这种类型的函数声明的,使用'window.loadJSInclude =函数...'。 – 2013-04-10 15:33:51

+0

怎么样?我真的不明白:( – luqita 2013-04-10 15:35:30

回答

0

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

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

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

+0

没有回答问题/解决问题.... – luqita 2013-04-10 15:48:13

+0

我不认为你是在理解这个问题,这篇文章也没有帮助,因为它使用jquery加载一个javascript,这里的问题是首先加载jquery – luqita 2013-04-10 16:10:01

+0

正如我所说的,这些小错误可能不是实际问题的根源,但是在我们继续之前需要修复它们,因为我不能在那里调试代码在这种情况下,我的回答并不是一个很好的方式来获得我的帮助,也不是一个准确的评估我的答案,因为我的回答确实解决了代码中的三个错误。 ,因为没有其他人似乎在帮助你,我参与SO的理由是为了加强社区,我会继续帮助你,因此,感谢你确认这些bug不是问题,我们现在可以向前迈进 – 2013-04-10 16:25:45

相关问题