Работая над большим, высоконагруженным проектом, я получил проблему, которая уже описана в миллиарде тем на форумах и блогах, но в моем случае нет решения, которое бы помогло. Вот история.
У меня есть HTML-код баннера, я не знаю, что это за код. Иногда это обычный HTML, но иногда это тег <script>
с document.write внутри него с тегом <script>
, в котором есть src для двойного щелчка по сети.
Итак, у нас есть: script> document.write> script (двойной щелчок).
Сеть двойного клика, как вы, возможно, знаете, также использует document.write, и большую часть времени они дают флеш-баннеры, которые должны загрузить еще один файл js.
Итак, в конце концов мы имеем: script> document.write> script (двойной щелчок)> document.write> script> ...
Это хорошо работает, когда вы помещаете его в HTML напрямую. Рендеринг страницы 1 часть, загрузка banner1, продолжение рендеринга страницы, загрузка banner2, завершение рендеринга страницы.
Но сейчас мне нужно сначала отобразить страницу и только после этого загружать баннеры.
Поскольку баннер использует document.write, мне нужно загрузить его до события window.onload (примечание: после window.onload document.write перепишет весь документ.)
Что я сделал:
В разделе заголовка у меня есть объект баннеров (реальное пространство имен типа :)) с областью действия.
Когда выполняется рендеринг страницы и код баннера, я помещаю код баннера в область видимости и помещаю <div id="bannerPlaceHolder"+id></div>
- поэтому здесь мне нужно будет поместить содержание баннера позже на
Страница отображается и перед тегом </body>
я помещаю метод <script>banners.load()</script>
banner.load, чтобы сделать это для каждого элемента в массиве области действия:
document.write('<div id="codeHolder'+id+'">');
document.write(bannerCode);
document.write('</div>');
И только после этого у меня есть window.onload()
событие, которое делает это:
взять все баннеры codeHolders и узел за узлом и добавить его узлы из codeHolder в placeHolder, поэтому в результате я загрузил баннеры после рендеринга страницы, и баннеры оказались в нужных местах.
Все отлично, кроме IE, он загружает любой js-скрипт, который был вставлен в DOM динамически асинхронным способом, поэтому document.write внутри скриптов doubleclick добавляет узлы в конец документа, а не в мои узлы codeHolder. Как обычно, это только в IE.
Я буду очень признателен всем, кто знает решение.