Я получаю следующую ошибку только в 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, который может добавлять, добавлять или смещать загрузку файла. При устранении этой проблемы я явно использовал добавление, а также смещение, чтобы заставить этот скрипт загружаться последним. Я даже попытался просто включить необработанный 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>");
, и теперь все загружается нормально во всех браузерах.