jQuery: $.getScript() — ошибка в FireFox 3

2010-07-27


Странно, но иногда при обновлении страницы возникает ошибка в jQuery-функции $.getScript (см. пример ниже). Ошибка связана с тем, что в callback-функции, которая является аргументом getScript, не всегда доступны функции или объекты (в данном примере функция «myIncludedFunction()»), объявленные в динамически подгружаемом скрипте (в примере «my_included_lib.js»). Причем, если вставить диалоговые сообщения alert() вне функций в удалённый скрипт (имеется в виду в «my_included_lib.js»), то можно убедится, что он подгружается и выполняется.
Не могу однозначно сказать где ошибка, но очень похоже на то, что именно где-то в реализации javascript в FireFox 3.

Пример кода:

// Динамически подключаем скрипт
$.getScript("my_included_lib.js", function(){
// Вызываем функцию с подключенного скрпитпа
myIncludedFunction();
// Здесь иногда и возникает ошибка
});

Как бы там ни было, эту ситуацию можно отловить с помощью try…catch, и выполнить полученный код с помощью eval(). Ниже приведен исправленный примере кода:

// Динамически подключаем скрипт
$.getScript("my_included_lib.js", function(data){
try {
// Пробуем вызвать нужную функцию, надеясь на то, что она инициализирована
myIncludedFunction();
} catch(err) {
// Если функция не инициализирована,
// то выполняем инициализацию полученного скрипта
eval(data);
// Снова вызываем необходимую функцию
myIncludedFunction();
}
});

Примечание: Функция getScript устанавливает первым аргументом функции возврата текст полученного подключаемого скрипта (в примере аргумент data).



Добавить комментарий