#javascript #jquery
#javascript #jquery
Вопрос:
Я рефакторинг кода для HTML-виджета (типа социальных значков), в котором первоначальный разработчик написал приложение виджета как расширение jQuery. Виджет вызывается, как показано ниже, и использует $.noConflict(), но страницы, на которых уже создан экземпляр jQuery, конфликтуют с jQuery, вызываемым виджетом.
Есть ли какой-либо обходной путь для повторного вызова jQuery? На некоторых страницах кажется, что он перезаписывает другие расширения jQuery, добавленные до тега виджета, см. Его Источник ниже. Фактический виджет — это другой файл, это код инициализации, который загружается из тега и который вызывает конфликт jQuery.
var xRemote = 'http://assets.xxxx.com/webwidget/',
jquerySrc = xRemote 'lib/jquery/jquery-1.11.1.min.js';
var appStart = function () {
// callback loader
var callback = function () {
$.getScript(xRemote "app/easyXDM/easyXDM.min.js", function (data, status, jqxhr) {
$.getScript(xRemote "lib/jquery/jquery.xdomainrequest.min.js", function (data, status, jqxhr) {
$.getScript(xRemote "app/public/js/jsonlite.js", function (data, status, jqxhr) {
$.getScript(xRemote "app/public/js/xxx.js", function (data, status, jqxhr) {
var $j = jQuery.noConflict();
$j('body').xxxxxwidgetextension();
$j('head').append('<meta name="viewport" content="width=device-width" />');
});
});
});
});
}
createStyleLink();
loadjQuery(jquerySrc, callback);
}
// create link to stylesheet
function createStyleLink() {
var ss = document.createElement("link");
ss.type = "text/css";
ss.rel = "stylesheet";
ss.href = xRemote "app/public/css/xxxwidget.css";
document.getElementsByTagName("head")[0].appendChild(ss);
}
// load jQuery with callback
function loadjQuery(url, callback) {
// create <script> tag
var s = document.createElement("script");
s.src = url;
if (s.addEventListener) {
s.addEventListener("load", callback, false);
}
else if (s.readyState) {
s.onreadystatechange = callback;
}
document.body.appendChild(s);
}
appStart();
Ответ №1:
Разве вы не можете просто проверить, загружен ли jQuery?
if(jQuery == undefined){
loadjQuery(jquerySrc, callback);
} else {
callback();
}
Комментарии:
1. Мы подумали об этом. В этом случае мы бы напрасно стреляли, поскольку существует так много разных версий jQuery.. в зависимости от версии владельца сайта потенциально может нарушить некоторые функции jQuery в нашем основном приложении.