Я получаю следующую ошибку только в Firefox 4 (не в FF 3.6.16, Safari, Chrome, Opera или IE):
jQuery("#list").jqGrid is not a function
loadComplete: function(){console.log('complete');}
myfile.js line 542
loadComplete
- последняя строка блока кода jqgrid (строка 542). Таким образом, он достигает конца вызова jqgrid и затем выдает эту ошибку.
Это сайт, который работал нормально в течение прошлого года. Как только я обновился до Firefox 4, я столкнулся с этим. Я уверен, что я загружаю этот вызов в jqgrid после того, как я загружаю все остальные мои javascript (и он отлично работает во всех других протестированных браузерах и более старых версиях Firefox).
Что может быть причиной чего-то подобного? Я бы подумал, что это можно решить, просто убедившись, что вызов jqgrid был сделан после того, как jquery и плагин jqgrid были загружены, но ... это уже похоже на случай (я даже пытался установить 5-секундный тайм-аут при загрузке бит, который вызывает jqgrid, чтобы все было обязательно загружено, но все равно не работает). Во всяком случае, почему только в FF4?
Дополнительная информация:
Вот порядок загрузки js на странице:
<script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="/js/jquery-ui-1.8.1.custom.min.js"></script>
<script type="text/javascript" src="/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="/js/jquery.jqGrid.js"></script>
<script type="text/javascript" src="/js/ajaxupload.js"></script>
Тогда конкретное представление, которое загружает вызовы jqgrid в конце страницы:
<script type="text/javascript" src="/js/viewspecific.js"></script>
Последний загружается методом в Zend Framework, который может добавлять, добавлять или смещать загрузку файла. При устранении неполадок я явно использовал append, а также смещение, чтобы принудительно загружать этот скрипт в последнюю очередь. Я даже пытался просто включить необработанный JS внизу скрипта вида, а не загружать его как отдельный файл, но ничего не изменилось.
Есть идеи, как решить эту проблему?
Исправлено, любезно Олег , заключается в изменении способа загрузки различных включенных файлов. В загрузчике (jquery.jqGrid.js) вы увидите код браузера, например:
if(jQuery.browser.safari ) {
jQuery.ajax({url:filename,dataType:'script', async:false, cache: true});
} else {
if (jQuery.browser.msie) {
document.write('<script type="text/javascript" src="'+filename+'"></script>');
} else {
IncludeJavaScript(filename);
}
}
Я заменил это на более общее:
document.writeln("<script type='text/javascript' src='"+filename+"'></script>");
и теперь все нормально загружается во всех браузерах.