这适用于现代浏览器,但它不会在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元素中。
答案 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>');