2011-12-11 20 views
2

jQuery JSを非同期でロードしようとしています。完全にロードされたときにコールバックメソッドを呼びたいと思っています。 同じコードブロックを何度も繰り返し使用している可能性があります。だから私はjQuery(または他のスクリプト)が実際にそれを追加する前に既に追加されているかどうかをチェックしたいと思います。すでにロード/ロードされている場合、現在のコールのコールバックを前のコールのコールバックに追加する必要があります。これは私がやろうとしていることです。スクリプトが既に読み込まれているか確認してください。そうでない場合は、非同期にロードしてください。

/*BP Asynchronous JavaScript Loader*/ 
if (typeof bp_onload_queue == 'undefined') var bp_onload_queue = []; 

if (typeof bp_dom_loaded == 'boolean') bp_dom_loaded = false; 
else var bp_dom_loaded = false; 

if (typeof bp_async_loader != 'function') { 
    function bp_async_loader(src, callback, id) { 

     var script = document.createElement('script'); 
     script.type = "text/javascript"; 
     script.async = true; 
     script.src = src; 
     script.id = id; 
     //Check if script previously loaded. 
     var previous_script = document.getElementById(id); 
     if (previous_script) if (previous_script.readyState == "loaded" || previous_script.readyState == "complete") { 
      callback(); 
      alert("had already loaded the same script completely"); 
      return; 
     } else { 

      script = previous_script; 
     } 
     if (script.onload != null) previous_callback = script.onload; 
     script.onload = script.onreadystatechange = function() { 
      var newcallback; 
      if (previous_script && previous_callback) newcallback = function() { 
       previous_callback(); 
       callback(); 
      }; 
      else newcallback = callback; 
      if (bp_dom_loaded) { 
       newcallback(); 
      } else bp_onload_queue.push(newcallback); 
      // clean up for IE and Opera 
      script.onload = null; 
      script.onreadystatechange = null; 
     }; 
     var head = document.getElementsByTagName('head')[0]; 
     if (!previous_script) head.appendChild(script); 
     else alert("had already started loading that script but not complete.so we appended to the previous script's callback"); 

    } 
} 

if (typeof bp_domLoaded != 'function') function bp_domLoaded(callback) { 
    bp_dom_loaded = true; 
    var len = bp_onload_queue.length; 
    for (var i = 0; i < len; i++) { 
     bp_onload_queue[i](); 
    } 
} 
/*JS gets loaded here */ 

bp_domLoaded(); 

/*Loading jQuery Asynchronously */ 
bp_async_loader("http://code.jquery.com/jquery-1.4.4.js", function() { 
    alert("script has been loaded : 1"); 
}, "jQueryjs"); 

bp_async_loader("http://code.jquery.com/jquery-1.4.4.js", function() { 
    alert("script has been loaded : 2"); 
}, "jQueryjs"); 

このコードにエラーがある場合、またはこれを行うより良い方法がある場合は、教えてください。

+2

を発見した - それを使用する必要があるページにjqueryのを追加し、ドンページに追加しないでください't。サーバー上で何らかの種類のフレームワークを使用している場合、特定のモジュールが特定のスクリプトがページに存在すると仮定できるように、ツールがあるかもしれません。 –

+0

クイックレスポンスをありがとう:)。このコードはJavaScriptプラグインのためのもので、別のプラグインで同じスクリプトを再利用しています。同じスクリプトを再度読み込まないようにしたいのですが、FBがJavaScript SDKの読み込みと同じようなことをしようとしていました。 – coderplus

+1

Googleローダーを使用してjqueryをロードしたり、少なくともどのように動作しているかを調べることができます。私はそれのためのAPIキーが必要だと思う。 –

答えて

関連する問題