У меня есть приложение, проверяющее, есть ли jQuery в текущем загруженном скрипте. Если нет, то я получить его с getScript
и загружаю функцию, которая в основном извлекать HTML/JS сериализованная в JSON на $.getJSON
, а не выполнять его:Почему jQuery не может выполнить загруженный скрипт, если я загружаю (перед ним) jQuery динамически?
if (typeof jQuery == 'undefined') {
if (typeof $ == 'function') {
thisPageUsingOtherJSLibrary = true;
}
function getScript(url, success) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0];
done = false;
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
};
};
head.appendChild(script);
};
getScript(AbsURL + '/scripts/jquery/jquery-1.9.1.min.js', function() {
if (typeof jQuery !== 'undefined') {
if (!thisPageUsingOtherJSLibrary) {
jQuery(document).ready(function ($) {
MyFunction($);
});
} else {
...
}
}
});
}
function MyFunction($) {
$.getJSON(AbsURL + "/widget/Init.aspx?" + queryString + "&callback=?", function (html) {
JsonToHtml(html);
});
function JsonToHtml(html) {
var items = [];
$.each(html, function (key, val) {
items.push(val);
});
$('body').prepend(items.join(''));
}
}
факт: если у меня есть JQuery, когда я загружаю на главной странице выполняется загруженный (десериализованный) скрипт, иначе он добавляется в тело, но ничего не выполняется.
Какой шаг мне здесь не хватает?
Проблема заключается в выполнении загруженного сценария. Это выполняется:
<script type="text/javascript">console.log("ciaopollo");</script>
В этом нет:
<script type="text/javascript">(function (w, d) { var loader = function() { var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src = "http://cdn.iubenda.com/iubenda.js"; tag.parentNode.insertBefore(s, tag); }; if (w.addEventListener) { w.addEventListener("load", loader, false); } else if (w.attachEvent) { w.attachEvent("onload", loader); } else { w.onload = loader; } })(window, document);</script>
Эмм, я добавил функцию 'JsonToHtml (HTML)' 'внутри .done', но изменить ничего. Он не может отобразить загруженный скрипт :( – markzzz
Я имею в виду, что когда я загружаю скрипт, jQuery (загружается динамически) уже загружен. Я не понимаю, почему он не может «выполнить» сценарий, десериализованный внутри 'JsonToHtml' (вот проблема). – markzzz
@markzzz ответил «UPDATE» выше, не смог отформатировать ответ на этом входе. – daxeh