私は外部JSファイル(例:test.js)に次のコードを持っています。これは、JQueryソースがまだ存在しないことを検出した場合、JQueryソースを指す追加のスクリプトタグを作成します。コードは実際にスクリプトタグを作成し、作成中の実際のスクリプトの前に挿入します。動的に生成されたJQueryスクリプトタグでスクリプトが実行されない
if (typeof(jQuery) == "undefined") {
var head = document.getElementsByTagName("head")[0];
// get any and all script tags
var scripts = document.getElementsByTagName("script");
// the actual script call the actions (ie: this one "test.js")
thisScript = scripts[scripts.length - 1];
// create element
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
head.insertBefore(script,thisScript);
}
上記はうまくいきます。しかし、私が抱えている問題は、JQueryのソーススクリプトタグが作成されると、残りの "test.js"コードが機能しなくなることです。これは、コードがJQuery関数にアクセスできない(またはJQueryがそこにあるかどうかを知らない)かのようです。
したがって、「test.js」に次のコードは動作しません。
$(document).ready(function() {
// ...
});
私はFF 12とFirebugのに応じて取得していますエラーは次のとおりです。 すべてのアイデアを「$が定義されていません」なぜこれが起こっているのか、それともどうすれば解決できるのでしょうか?
注:私はターゲットページにJQueryを配置することができます。しかし、これはオプションではありません。 JQueryが存在するかどうかをコードで検出できる必要があります。そうでない場合は、JQueryを指すスクリプトタグを作成し、Jqueryコードを実行します。
驚くばかり!初期化コード?私の頭を撫でる。なぜ私には起こらなかったのだろうか。素晴らしい答え。ありがとう! –
if-thenコントロール、onloadイベント、settimeout、その他いくつかの方法を使用して初期化コードを試したが、運がない。まだ「$定義されていません」。悲しいかな、私の限定されたコーディング経験はこれまでのところ私を奪うことができます。私は本当にいくつかの指導を感謝します。 require.jsのいずれかを把握していません。助けてくれてありがとう。 –
hunlock dot comの記事を読んで、それを理解しました。 '$ document.ready(...')を関数内にラップし、変数 'script'のonloadイベントを使用して呼び出しました。 –