2011-12-15 7 views
0

私は、コンソールからのブロックとしてこれを実行する場合、私は特定のウェブサイトではJavaScriptを経由してJavascriptの参照をロードし、コンソールからすぐにそれを呼び出す

j=document.createElement("SCRIPT"); 
j.src="http://code.jquery.com/jquery-latest.pack.js"; 
document.getElementsByTagName("HEAD")[0].appendChild(j); 
var J = jQuery.noConflict(); 

から文書でのjQueryをロードするために、次のコードを持って、I get

ReferenceError: jQuery is not defined

ただし、手動で各行を入力すると、最終行が正常に実行され、例外が発生しません。

私には何か不足していますか?以前のコマンドの処理を完了するためにはDOMに数ミリ秒以上かかることがありますか?

問題が発生しても、この状況を解決する方法を知っている人はいますか?

これは、それぞれ、devツールとfirebugでchromeとfirefoxで発生します。

+0

それは、DOMは、コマンドを処理する時間が必要であることはあまりありません。 DOM上にスクリプトタグをプッシュしただけですが、外部参照であるため、ダウンロードされて非同期に実行されます。次のコマンドを実行することによって、ダウンロードとスクリプトの解釈が完了したと仮定します。おそらく未定義のエラーです。これを「google-chrome」とタグ付けしたので、onload関数は動作すると言いますが、それはすべてのブラウザで機能しないので、あなたの走行距離が変わることに注意してください。 –

答えて

4
j=document.createElement("SCRIPT"); 

j.onload = function(){ 
    window.J = jQuery.noConflict(); 
}; 

j.src="http://code.jquery.com/jquery-latest.pack.js"; 
document.body.appendChild(j); 
+0

jQueryが 'jQuery'変数としてアクセスできないようにするには、代わりに' J = jQuery.noConflict(true); 'を実行します。 –

+0

Esalijaが変更を受け入れるまでは、いい人になり、document.bodyではなくdocument.headにスクリプトを追加してください! –

0

これで最後の行を交換してみてください:

function checkJQuery() { 
    if (typeof(jQuery) == 'undefined') { 
     setTimeout('checkJQuery', 50); 
    } 
    else { 
     J = jQuery.noConflict(); 
     J(function() { 
      // Document ready stuff here 
     }); 
    } 
} 

checkJQuery(); 
+0

dzejkejはsetTimeoutのパンチに私を打つように見えます。それはどこにクレジット! – Coronus

+0

jQuery.comが何らかの理由で停止しているなど、jQueryがロードされない可能性があります。 Esalijaの 'onload'ベースの解決策は道のりです。 'onerror'にフックすることもできます。 –

+0

@Coronus Esalijaの解決策はずっと優れているので、私は私の答えを削除しました。 – kubetz

関連する問題