jQuery $.getScript - старые функции и переменные в исполняемом скрипте
Я выполняю JavaScript с помощью jQuery $.getScript. В исполняемом скрипте у меня нет доступа к функциям и переменным моего исходного файла.
Есть ли решение?
3 ответа
Сценарий, выполняемый $.getScript() , имеет доступ к глобальному контексту. Вы можете использовать любую глобальную переменную (или функцию в этом отношении) из вашего внешнего скрипта.
Ник Крэйвер, я просто провожу 3 (!) Часа, зацикливаясь на том, почему моя вещь не сработает, и вы дали мне понимание, которое мне было нужно, чтобы заставить его работать.
XOXOXOXOXOXOXOXO
интересно отметить:
Вы можете объявить переменную как переменную jquery следующим образом:
$variableName = something;
Таким образом, jquery также имеет к нему доступ из любой точки области видимости.
$(function(){
$alertString = 'Hello World';
$.getScript('test.js', function(){
// do nothing
});
}
test.js:
alert( $alertString );
Я нашел ответ здесь полезным для моего понимания темы, но я все еще не мог заставить его работать в моем собственном контексте, пока не наткнулся на эту статью на TechMonks:
Когда я скопировал / вставил их последний пример в заголовок моего основного файла.js, все это сработало. По крайней мере, для меня функция $.getScript() была сломана, и это исправление:
jQuery.extend({
getScript: function (url, callback) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
script.src = url;
// Handle Script loading
{
var done = false;
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function () {
if (!done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
done = true;
//success();
//complete();
if (callback) callback();
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if (head && script.parentNode) {
head.removeChild(script);
}
}
};
}
head.insertBefore(script, head.firstChild);
return undefined;
}
});