У меня есть уникальная проблема -
Я разрабатываю веб-приложение, которое создает виджеты, которые пользователь может затем встроить на свою страницу (в основном, в сообщения в блоге). Я хочу, чтобы им просто пришлось встраивать одну строку, поэтому я просто использовал эту строку для включения оператора, чтобы вытащить Javascript с моего сервера.
Проблема в том, что я создаю код виджета с использованием jQuery, и мне нужно загрузить плагин jQuery, поскольку я, очевидно, не знаю, будет ли он доступен для моих пользователей. Я подумал: «Это должно быть довольно просто» ....
function includeJavaScript(jsFile) {
var script = document.createElement('script');
script.src = jsFile;
script.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(script);
}
includeJavaScript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
jQuery();
Итак, я добавляю файл jQuery в заголовок, а затем пытаюсь запустить функцию jQuery. Проблема в том, что это не работает! Каждый раз, когда я запускаю его, я получаю сообщение об ошибке, что переменная jQuery не определена. Я попробовал несколько вещей. Я попытался поместить функции jQuery в триггер onLoad, чтобы вся страница (включая, предположительно, файл jQuery) загружалась до вызова моего скрипта. Я попытался поместить функцию jQuery в отдельный файл и загрузить ее после загрузки файла jQuery lib. Но я понимаю, что упускаю что-то простое - я новичок в jQuery, поэтому, если мне не хватает чего-то очевидного, я прошу прощения ...
EDIT
Хорошо, я попробовал предложение, предложенное digitalFresh, следующим образом (используя Safari 5, если это поможет), но я все еще получаю ту же ошибку?
function test() {
jQuery()
}
var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
script.onload = test(); //execute
document.body.appendChild(script);
EDIT
Ладно, я НАКОНЕЦ заставил его сработать, по неосторожному предложению Брендана, поместив СЕБЕ вызов в обработчик 'onload', вот так:
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent( function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
document.body.appendChild(script);
jQuery();
});
На данный момент, как вы видите, мне даже не нужно помещать его в «onload» - он просто работает. Хотя я должен признать, я все еще не понимаю, ПОЧЕМУ это работает, что беспокоит меня ...