1

考虑保存在 script.js 中的这个脚本:

if ((typeof window.jQuery) == "undefined") {
    var js = document.createElement("script");
    var he = document.getElementsByTagName('head')[0];
    js.type = "text/javascript";
    js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
    he.appendChild(js);
}


$('document').ready(function(){
    alert('testing');
});

然后一个基本的html页面是这样的:

<html>
    <head>
    </head>
    <body>
    </body>
</html>

<script src=script.js></script>

这会导致错误:

ReferenceError: $ is not defined
script.js
第 8 行

为什么 $ 没有定义?首先是 if 之间的代码,然后是 code ready()。这会在加载文档时将回调函数中的代码排队,对吗?

如果我查看 Firebug 中的代码,则 jQuery 已正确加载。之后会发生这种情况document.read吗?还是我在这里错过的其他东西?

4

1 回答 1

2

如果您坚持以这种方式加载脚本,请让浏览器在实际准备好使用时通知您。

if (typeof jQuery !== "function") {
    var js = document.createElement("script");
    var he = document.getElementsByTagName('head')[0];
    js.type = "text/javascript";
    js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
    he.appendChild(js);

    js.addEventListener("load", function () {
        alert(typeof $);  // function
    });
}

alert(typeof $); // undefined

旁注:通常最好严格检查类型。如果window.jQuery是一个对象、数字或字符串,那么您的代码不应该这样。

于 2013-07-28T22:33:42.860 回答