Динамическая (2 уровня) загрузка Javascript / CSS в IE6

#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. У меня все еще не работает — та же проблема с отсутствующим объектом — смотрите Пример кода в исходном сообщении