У меня есть приложение, в котором сгенерированные HTML-страницы указывают один файл JavaScript:
<script language="JavaScript" src="/global.js"></script>
В global.js
находится следующий код для загрузки одного пользовательского файла user.js
:
var UserJsFile = document.createElement("script");
UserJsFile.type = "text/javascript";
UserJsFile.src = "/user.js";
document.getElementsByTagName("head")[0].appendChild(UserJsFile);
// Add default onLoad handler
window.onload = global_onLoad;
// Global onLoad function
function global_onLoad(){
submitdisabled = false;
user_onLoad();
document.forms[0].onsubmit = global_onSubmit;
}
а в user.js
есть аналогичный код, позволяющий пользователю указать несколько пользовательских JS-файлов:
// Define all user-defined JavaScript sub-files
var UserJsFiles = [];
UserJsFiles[0] = "install.js";
UserJsFiles[1] = "complex.js";
UserJsFiles[2] = "gravis.js";
UserJsFiles[3] = "locator.js";
UserJsFiles[4] = "locator_x.js";
// Load all the user-defined JavaScript sub-files
for (i=0; i<UserJsFiles.length; i++) {
var UserJsFile = document.createElement("script");
UserJsFile.type = "text/javascript";
UserJsFile.src = UserJsFiles[i];
document.getElementsByTagName("head")[0].appendChild(UserJsFile);
}
// Perform any user-defined onLoad functionality
function user_onLoad() {
// user code goes here
return;
}
Проблема, которую я получаю, заключается в том, что после запуска кода в global.js (для присоединения user.js) страница, кажется, думает, что она загружена (даже если не все пользовательские файлы JS были прикреплены/загружены), поэтому он запускает global_onLoad()
, который терпит неудачу, потому что он вызывает user_onLoad()
, который может вызывать определенные пользователем функции onLoad в некоторых других файлах...
По крайней мере, я думаю, что происходит...
Я что-то упустил? Присоединение каждого определяемого пользователем JS-файла в качестве элемента DOM происходит асинхронно?
Обратите внимание, что мои пользователи не могут использовать JQuery или любую другую среду JS, поэтому, если у меня есть проблема, мне нужно решить ее с помощью простого JS...
global_onLoad
после того, как присваивает егоwindow.onload
. Вызывается ли global_onLoad? Какие сообщения об ошибках вы получаете? - person Sean Hogan   schedule 24.02.2010global_onLoad
вызывается, как иuser_onLoad
, но некоторые функции, вызываемыеuser_onLoad
, не вызываются — предположительно, потому, что JS-файлы, в которых они определены, загружены не полностью. Однако, если я обновлю страницу, все файлы JS будут полностью загружены, поэтому все работает правильно. - person roryhewitt   schedule 25.02.2010