0

非同期にロードする最初の JavaScript ファイルを作成しようとしていますが、後でオブジェクトから関数を呼び出すのに問題があります。以下は私のJavaScriptファイルexampletest.jsの例です...

(function(){
    var example = {
        test : function () {
            alert("test function called");
        }
    };
    window.example = example;
})();

次に、次のコードを使用してこのファイルを呼び出そうとします。

    (function(doc, example) {
            window.example = example;

            var script = doc.createElement("script");
            script.type = "text/javascript";
            script.async = true;
            script.src = "http://www.example.com/exampletest.js";

            var scriptTag = doc.getElementsByTagName("script")[0];
            scriptTag.parentNode.insertBefore(script, scriptTag);
    })(document, window.example || []);

    example.test();

このスクリプトを実行すると、「Uncaught TypeError: Object has no method 'test'」というエラーが表示されます。

ページがロードされた後にメソッドを呼び出すと、たとえばリンクをクリックすると、テスト メソッドが適切に呼び出され、アラート ボックスが表示されます。

私はこれをよりよく理解しようと探し回っていますが、これまでのところ運が悪いです. has no method 'test' を取得せずに関数を呼び出す方法をよりよく理解しようとしています。javascript が読み込まれた後に関数呼び出しをプッシュする方法はありますか?

4

1 に答える 1

-1

関数を呼び出す前に、関数が存在するかどうかを確認してください。

これを試して :

if (typeof example.test == function){
    example.test();
}

注: JavaScript は非同期で読み込まれるため、機能しwindow.onloadません。

アップデート

持つことの全体的な目的はasync、スクリプトが読み込まれるのを待たずにページを読み込むことです。両方を持つことはできません。

これはうまくいきません

<script src="exampletest.js"  async ></script>

<script type="text/javascript">
    example.test();
</script>

ただし、実行はファイルのロードを待機するため、これは機能します

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

<script type="text/javascript">
    example.test();
</script>
于 2013-01-30T04:21:06.097 に答える