При использовании функции типа importjs () (пример приведен ниже), jQuery, похоже, не загружается до кода, следующего за ним.
Вот пример HTML-файла:
<html>
<head></head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
function importjs(jsFile) {
var body = document.getElementsByTagName('head').item(0);
var scpt = document.createElement('script');
scpt.src = jsFile;
scpt.type = 'text/javascript';
body.appendChild(scpt);
}
var f1="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js";
//importjs(f1);
var $j=jQuery;
alert("hello stackoverflow!");
</script>
</body>
</html>
С приведенным выше кодом предупреждение должно успешно сработать.
Затем закомментируйте первый блок скрипта, то есть тот, который явно загружает jQuery, и раскомментируйте строку importjs (f1) во втором блоке скрипта. На этот раз предупреждение не срабатывает, по крайней мере, в Firefox и Safari.
Теперь добавьте дополнительное предупреждение перед строкой "var $ j = jQuery". Для меня это работает в обоих браузерах, независимо от того, как долго или коротко я жду. SetTimeout, вероятно, также поможет, но это не идеальный способ запрограммировать что-то подобное.
Если javascript однопоточный, почему importjs не работает? Это потому, что новый элемент, созданный importjs, не исполняется до тех пор, пока не завершится первый блок, или новый элемент должен быть выполнен сразу после его создания?