我有以下 JavaScript 片段,将从客户的网站引用。它使用 jQuery 1.5,所以我的问题是如果客户端已经加载了一个 jQuery 实例怎么办?还是替代的 JavaScript 库?
我正在使用 noConflict() 来尝试解决这个问题,但它似乎不起作用,我不知道为什么。任何帮助表示赞赏
主要问题是我收到一个错误返回,告诉我 jQueryMH 未定义,但我什至在设置 keepAlive 函数的时间间隔之前就明确定义了它。
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,但是我们遇到了以下问题,可能是因为它在每次函数运行时设置 noConflict(每 5 秒)
我设置的外部包含此 JS 脚本的测试页面已经加载了 jQuery 1.8,然后它加载了上面的脚本。因此,由于我的 noConflict,我希望 jQueryMH.fn.jquery 返回 1.5.0 和 jQuery.fn.jquery 返回 1.8;但是它们都返回 1.5.0,这意味着我的 noConflict 无法正常工作,因为 jQuery 不会保留为已加载到客户端网站的 1.8 版库。