Плагины JQuery и JQuery noConflict
Я использую JQuery в noConflict
режим, так как мой код является виджетом JS, работающим на странице хоста.
Я хотел бы, чтобы мой код динамически загружал плагин jQuery ( qTip2), не мешая jQuery страницы.
Проблема в том, что плагин связывает свою переменную $ с jQuery локальной страницы.
Я пытался загрузить плагин перед звонком noConflict()
и это работает, но оставляет период, когда глобальный $ указывает на мой jQuery.
Вот код (я опустил loadJsFile
функция, чтобы держать его коротким. Он добавляет скрипт в голову и перезванивает при загрузке):
(function trackJq(timesToGo) {
if (timesToGo-- > 0) {
log("timed");
setTimeout(function() {trackJq(timesToGo)}, 20);
}
})(10)
function isDef() { return typeof $.qtip !== 'undefined'; }
function log (msg) { console.log(msg + " $:" + jQuery.fn.jquery + " qTip:" + isDef()); }
log("Before loading my jQuery");
loadJsFile("https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js", function() {
log("After loading my jQuery");
loadJsFile("http://cdn.jsdelivr.net/qtip2/2.2.0/jquery.qtip.min.js", function() {
log("After loading qTip");
$jq = jQuery.noConflict(true);
log("After calling noconflict");
// rest of code here...
});
});
и вывод (показывает, что есть временной интервал, когда мой jQuery вступает во владение):
timed $:1.2.3 qTip:false
Before loading my jQuery $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
After loading my jQuery $:1.11.0 qTip:false
timed $:1.11.0 qTip:false
timed $:1.11.0 qTip:false
timed $:1.11.0 qTip:false
After loading qTip $:1.11.0 qTip:true
After calling noconflict $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
timed $:1.2.3 qTip:false
Есть лучший способ сделать это?