0

呼び出したい関数を含むJavascriptファイルを読み込んでいます。ロードを「開始」してから実際に関数を呼び出すまでの間、JSはまだロードされていないため、これは不可能です。もちろん、私はのようなことをすることができますがsetTimeout('functionCall();',5000);、これはあまり効率的な方法ではないと思います、そしてそれは私には本当に不安定に思えます。そういうわけで私はそれをするより良い方法があるかどうか疑問に思いました。

これが私が使用しているコードです。問題の関数はと呼ばれcontrollerStartます。ここで最後の行をコメントアウトし、それをJavascriptターミナルに入力すると(Chrome開発者ツールのように)、すべてが機能します。

    function loadController(name){
        clearAll();
        scriptContainer.innerHTML = '';
        var scriptElement = document.createElement('script');
        scriptElement.setAttribute('src','controllers/' + name + '.js');
        scriptElement.setAttribute('type','text/javascript');
        scriptContainer.appendChild(scriptElement);
        controllerStart();// <-- Doesn't work from here, but works on a terminal
    }

ご覧いただきありがとうございます!

4

3 に答える 3

0

Javascriptを参照した後、関数を呼び出します。

JSの読み込みは同期です。

それで.....

----jsライブラリ呼び出し-----

-----ここで関数を呼び出します-----

利益!

編集:具体的には:

function loadController(name){
        clearAll();
        scriptContainer.innerHTML = '';
        var scriptElement = document.createElement('script');
        scriptElement.setAttribute('src','controllers/' + name + '.js');
        scriptElement.setAttribute('type','text/javascript');
        scriptContainer.appendChild(scriptElement);
        scriptElement.onload = new function(){controllerStart();}; 
       //something like that.
    }

編集2:私の悪い-「ロード」ではなく「オンロード」を使用する-脳のjqueryが多すぎる

「onload」の詳細については、http ://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.htmlをご覧ください。

于 2012-04-24T22:11:35.387 に答える
0

Nicholas C. Zackasから、使用したいコードだけが含まれている、ここで読むことができる良い投稿があります。

基本的には、ロードするJSファイルのURLと、ロード時に実行するコールバックの両方を含む関数です。次に、<script>タグを作成し、(onreadystatechangeまたはonloadイベントを介して)ロードされた後に実行するコールバックをアタッチし、それをDOMに挿入します。

次に、あなたがする必要があるのはそれを次のように呼ぶことです:

loadScript('controllers/' + name + '.js', controllerStart);
于 2012-04-24T22:19:54.000 に答える
0

そのサウンドから、JavaScriptを非同期でロードしています。最近のブラウザでは、タグの読み込みが完了すると発生するonloadイベントがあります。ただし、クロスブラウザーのサポートが必要な場合、それを行う唯一の方法は次のいずれかです。

(a)ページと同じサーバーからロードされた場合は、AJAXを使用してJavaScriptをロードし、ロード時に(<script>タグを使用する代わりに)eval()を使用して実行します。

(b)ファイルを制御する場合は、ファイルの最後にイベントトリガーを追加し、メインのJavaScriptファイルでリッスンします。JQueryのbind()関数とtrigger()関数はそのために便利です。

(c)他の場所からロードされ、制御できない場合(ただし、再配布する権限がある場合)、サーバーに再配置して(a)に従います。

また、非同期の読み込みを廃止し、タグのストリームをヘッダーに配置することもできます<script>。これは昔ながらの方法です。これにより、前のスクリプトが終了するまで各スクリプトが実行されないことが保証されます。

于 2012-04-24T22:32:59.980 に答える