クライアントの Web サイトから参照される次の JavaScript があります。jQuery 1.5 を使用しているため、クライアントに既に jQuery のインスタンスがロードされている場合はどうなるでしょうか。それとも代替の JavaScript ライブラリですか?
これを回避するために noConflict() を使用していますが、うまくいかないようで、その理由がわかりません。どんな助けでも大歓迎です
主な問題は、jQueryMH が未定義であることを示すエラーが返されることですが、keepAlive 関数で間隔を設定する前に、jQueryMH を明確に定義しています。
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = '//ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js';
script.type = 'text/javascript';
script.onload = script.onreadystatechange = function() {
var jQueryMH = jQuery.noConflict(true);
setInterval(keepAlive(), 5000);
};
head.appendChild(script);
function keepAlive() {
var mhProtocol = ((document.location.protocol == "https:") ? "https://" : "http://");
var randomNumber = Math.floor(Math.random()*10000);
var mhVisitorId = document.cookie.match('mhVisitorId=(.*?)(;|$)');
var urlParamString = "";
if(mhVisitorId) {
urlParamString = "&mhVisitorId=" + encodeURIComponent(mhVisitorId[1]);
}
var mhUrl = "www.urlishere.com";
//var jQueryMH = jQuery.noConflict();
jQueryMH.ajax({
url: mhUrl,
dataType: 'jsonp'
});
}
これ以外に、関数自体に noConflict() を設定しようとしましたが、これは機能し、jQueryMH を参照できますが、おそらく関数が実行されるたびに (5 秒ごとに) noConflict を設定しているため、次の問題があります。
この JS スクリプトを外部に含むように設定したテスト ページには、既に jQuery 1.8 が読み込まれており、その後、上記のスクリプトが読み込まれます。したがって、noConflict のため、jQueryMH.fn.jquery が 1.5.0 を返し、jQuery.fn.jquery が 1.8 を返すことを期待します。ただし、どちらも 1.5.0 を返します。これは、クライアントの Web サイトに既にロードされているバージョン 1.8 ライブラリとして jQuery が保持されないため、noConflict が機能していないことを意味します。