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: $ が定義されていません
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 に答える