1

次のコードを同期する方法がわかりません:

javascript: (function() {
    var s2 = document.createElement('script');
    s2.src = 'http://192.168.0.100/jquery.js';
    document.body.appendChild(s2);
    s = document.createElement('link');
    s.rel = "stylesheet";
    s.href = "http://192.168.0.100/1.css";
    s.type = "text/css";
    document.body.appendChild(s);
})();
//var startTime = new Date().getTime();
//while (new Date().getTime() < startTime + 1000);
$(document).ready(function(){
    b="c:\\1.txt";
    var fso, f1; 
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f1 = fso.CreateTextFile(b, true);
    f1.WriteLine("Testing") ;
    document.writeln("File " + b + " is created.");
});

最初にこのスクリプトを実行すると、エラーが発生しますSCRIPT5009: '$' is undefined。これは、jQuery ライブラリがまだロードされていないためだと思います。エラーが表示された後に同じスクリプトを実行しようとすると、動作が正しくなります。同期のために、上のリストでコメントされているコードを使用しようとしています。動作します(常にではありません)。しかし、それは厳密な同期ではないことを理解しています(具体的な状況に依存します)。より巧妙な同期を使用するにはどうすればよいですか?

4

3 に答える 3

2
(function($){
  //use $ now

  $(function(){
    //dom ready
  });

})(jQuery);

このライブラリは、jquery ライブラリの下のフッターに必ずロードしてください。

于 2012-10-06T18:48:37.257 に答える
1

これは、dhtml メソッドを使用してscriptタグを配置すると、非同期で評価されるためです。appendChildドキュメントで実行しているときに「準備ができている」ことをリッスンするには、次のパターンに従います

(function() {
    var s2 = document.createElement('script');
    s2.src = 'http://192.168.0.100/jquery.js';
    document.body.appendChild(s2);
    s2.onload = s2.onreadystatechange = function(){
      if(s2.readyState == "complete") $(document).ready(function(){
        b="c:\\1.txt";
        var fso, f1; 
        fso = new ActiveXObject("Scripting.FileSystemObject");
        f1 = fso.CreateTextFile(b, true);
        f1.WriteLine("Testing") ;
        document.writeln("File " + b + " is created.");
      });
    }
    s = document.createElement('link');
    s.rel = "stylesheet";
    s.href = "http://192.168.0.100/1.css";
    s.type = "text/css";
    document.body.appendChild(s);
})();
于 2012-10-06T18:51:58.910 に答える
0

問題は$、スクリプト タグが追加されたが、ファイルがダウンロードされる前に、 の行がヒットすることです。通常、ブラウザーは JavaScript の読み込み中にブロックするため、この問題は回避されますが、プログラムで実行しているため、標準の同期は得られません。

最善の策は、スクリプトがロードされるのを待つことです。ここに情報があります:

動的なクロスブラウザー スクリプトの読み込み

スクリプトのダウンロード完了のロード イベントをキャッチするとき。次に、そのイベントへのコールバックとして既存の$準備完了関数を呼び出すことができます。このようなもののために作成されたローダーを使用するか、やむを得ない理由がない限り、DOM で標準のスクリプト タグを使用することをお勧めします。

于 2012-10-06T18:49:28.110 に答える