#javascript #css #dynamic #internet-explorer-6
#javascript #css #динамическая #internet-explorer-6
Вопрос:
я пытаюсь динамически включать файлы js (и css) в веб-страницу, подобную этой: index.html -> loader_a.js -> a_foo.js , a_bar.js , a_foo.css и так далее.
Хотя это работает без проблем в FF (с использованием appendChild), я не могу запустить его в IE6. Я пробовал различные доступные решения (добавление в узел dom, вызов ajax и eval и многое другое из (http://ntt.cc/2008/02/10/4-ways-to-dynamically-load-external-javascriptwith-source.html ) здесь и там и другие, подобные сообщению # 2013676) но он не делает того, что должен делать.
Когда я проверяю с помощью DebugBar, я вижу, что мои включаемые файлы (например a_foo.js) фактически загружен, но его содержимое пустое — в других включенных файлах (1 уровень / напрямую) это содержимое отображается, поэтому я предполагаю, что проблема есть…
«Ошибка», которую я получаю, всегда является неопределенным объектом, который является o / c b / c вызываемая мной функция загружена неправильно, поэтому от нее мало помощи. Я не получаю никаких ошибок при включении.
Я проверил javascripts, чтобы они были в порядке.
У кого-нибудь есть окончательное решение для этого? Я могу воссоздать свои тесты и опубликовать некоторый код, если это поможет.
Спасибо, с уважением, Томас
Пример HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML lang=en><HEAD><TITLE>Test</TITLE>
<script type="text/javascript" src="mmtest_files/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="mmtest_files/multiload.js"></script>
<script type="text/javascript" >
function init2() {
// using the data from the loaded js files
var a= mmf("a");
document.getElementById('status').innerHTML = "Variable set:" a;
}
// magic...
include(['mmt.js'],init2);
</script>
<BODY >
<H2>Test me!</H2>
<SPAN id=status>status old</SPAN>
</BODY></HTML>
JS 1 является многозадачным из ответа 1
JS2 — это тест, включающий:
функция mmf(param) { возвращает «Вызывается с помощью» param; }
Ответ №1:
Вам нужно использовать document.write в ie, чтобы параллельно загружать скрипты.
Смотрите: Загрузка скриптов без блокировки
Кстати, у меня есть такой скрипт: асинхронная загрузка нескольких файлов Javascript по порядку
(возможно, потребуются некоторые усовершенствования в Chrome)
Обновить
Существует функция обратного вызова, она необязательна. Ее можно использовать для привязки зависимого скрипта к файлам. НАПРИМЕР:
function myjQueryCode() {
// ...
}
include(['jquery.js','jquery-ui.js'], myjQueryCode);
Чтобы ваш зависящий от jquery код выполнялся после загрузки файлов.
Комментарии:
1. Я попробую это — но у меня сразу же есть несколько вопросов / комментариев: URL js в исходном коде вашего сайта ( galambalazs.extra.hu/multiload/multiload.js ) больше не работает (должен быть galambalazs.fw.hu ). Затем вы проверяете «typeof callback === «функция» » — предназначена ли функция и почему? И, наконец, зависит ли скрипт от WebKit или он будет работать без него? (WebKit/i.test(navigator.UserAgent))
2. да, ссылка указывает на старую версию, но вы можете просмотреть исходный код. Взлом webkit — это то, что я собираюсь исключить, это временное исправление. И да, это работает в кроссбраузерном режиме. Что касается обратного вызова, я обновил свой ответ.
3. о, теперь я вижу, я неправильно ввел
typeof callback === "function"
часть. это не предназначено. Я собираюсь обновить его прямо сейчас.4. Я обновил ссылку на сайт, размещенный в США. Это также должно быть быстрее.
5. У меня все еще не работает — та же проблема с отсутствующим объектом — смотрите Пример кода в исходном сообщении