私がやろうとしていることのアイデアは、私がホストするスクリプトをクライアントが Web サイトに追加できるようにすることです。スクリプトで jQuery を使用できるようにしたいのですが、常に使用できるとは言えません。これが私が賢明なコードを持っているものです。これは、これまでにホストされた JavaScript ページの完全なファイルであり、動作させることができません。$('title').html の部分は、動作するかどうかを確認するためのものです
私がホストしているスクリプトで、クライアントの Web サイトに jQuery を含めるように処理したいと考えています。クライアントが自分のスクリプトに加えて jQuery を含める必要がないようにしたい
window.onload = function () {
if (typeof jQuery == 'undefined') {
var jq = document.createElement('script');
jq.type = 'text/javascript';
jq.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
var sc = document.getElementsByTagName('script')[0];
sc.parentNode.insertBefore(jq, sc);
}
console.log($('title').html());
}
この JavaScript ファイルはサーバーに配置されており、Google アナリティクスの場合とほぼ同じ方法で、クライアントにこのファイルがインクルードされます。
これは、クライアントに含めてもらいたい唯一のものです。基本的にGoogleアナリティクスと同じように引っ張った
<script type="text/javascript">
var _waq = _gaq || [];
_waq.push(['PARAM1', 'PARAM2']);
(function() {
var wa = document.createElement('script');
wa.type = 'text/javascript';
wa.async = true;
wa.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'PATH/TO/SCRIPT/wa.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wa, s);
})();
</script>
ページを実行するとエラーがUncaught ReferenceError: $ is not defined
表示されますが、ページが読み込まれた直後に入力する$('title').html();
と、コンソールにタイトルが返されます。
これは、スクリプトの console.log が実行されていて、jQuery がまだ完全にロードされていないタイミングと関係があると確信しています。私の質問は、jquery が利用できない場合に動的にロードするクライアントが追加できる JavaScript ページを作成し、スクリプトの他のものを実行する前にそれをロードするにはどうすればよいかということです。