Проблема в document.write при использовании setInterval()
Вот у меня проблема, нужно что бы срабатывал некий скрипт(банер), после того как отработали мои(они срабатывают после загрузки DOM).
Что делаю: ставлю флаг loadBanerLoaded который принимает значение true, только тогда когда отработают основные скрипты, а другой код обрамляю var _timerRight_ban = setInterval( function() { if (loadBanerLoaded) { clearInterval(_timerRight_ban); document.write ("Что то банер пишет"); } }, 10); Если не использовать setInterval(), то срабатывает document.write ("Что то банер пишет"); и в нужном мести пишет что надо. Но при использовании setInterval(), вся страница переписывается document.write(). Почему так происходит? Как можно решить проблему? :( |
Потому что document.write() пишет в документ в тот момент когда выполняется и туда, где выполняется.
В случае с интервалом текущий документ уже закрыт для записи и document.write() перезаписывает документ. |
Цитата:
var FF = function (){document.write}; к DOM элементу, наподобие innerHTML? |
Нет. Вам нужно будет работать с DOM элементами, если вы хотите сделать что-то после загрузки документа.
|
Нет никакой разницы как оформлять, если документ уже загружен document.write() попытается его перезаписать.
Если скрипт, который вы хотите подключить после загрузки DOM, использует document.write(), то опять же - дело гиблое. Можно, конечно, в отдельных случаях сделать замену document.write (через DOM), но это не есть карашо, не тревиально и работает через раз... |
Цитата:
А при этом способе не возникнет аналогичная ошибка? ведь document.write() там будет сидеть всеравно :confused: |
Вам говорят не использовать document.write вообще, если необходимо произвести какие-либо действия над готовым документом. Никакой AJAX тут не нужен.
|
Цитата:
|
Выход один: почитать про работу с DOM в JavaScript. Про то, как создавать и перемещать DOM-узлы. На сайте больше чем достаточно информации по этому вопросу.
|
Octane,
Тут немного сложнее - скрипты сторонние, в них document.write. Не заставишь же их переписать свои скрипты, чтоб они работали после загрузки DOM. |
Так что выход один использовать iframe?
|
тю блин люди, а что создать динамически элемет, в который тупо через иинерХТМЛ вставить банер слабо?
просто создать спозиционированый див и в него впихнуть сам банер или любой код который надо.. делов то ... |
magistr_bender,
Код в тегах <script> не выполняется при вставке через innerHTML. А если его выполнить в "другом потоке" (через eval), то вызов document.write перезапишет все содержание страницы. GOll, Во многих случаях iframe - не выход (например в случае google ads). Мне понравился вариант Snipe с временной заменой document.write функцией буфферезирующей вывод, через которую потом вставляется вывод в нужный тег, через innerHTML. Это решение применимо, когда есть уверенность в том, что document.write больше нигде не используется. |
Цитата:
|
Цитата:
Т.е. при первых 2-3 загрзках все хорошо, дальше белый экран. Возможно имеет смысл как-то скооперироваться и совместно решить данную проблему. Потому что даже на зарубежных сайтах не видел решения подобной проблемы. А с iframe'ами, если я правильно понимаю (поправьте, если не прав), можно в iframe, куда вы ставите google ads писать немного содержимого подгружаемой страницы, например какие-либо ключевые слова или предложения. Но это по сути будет двойной загрузкой одной странички. Или я неправ и так сделать нельзя? |
Цитата:
|
Цитата:
|
Цитата:
|
GOll, извиняюсь, правильно спросить так:
Цитата:
|
Цитата:
Цитата:
|
с iframe у меня работает. Цель обсуждения: какие есть способы загруски банеров после загруски DOM(с учетом того что они используют document.write).
И я только что узнал, что для оптимизации, iframe не желательно использовать, т.к. идут лишние запросы на сервер. Цитата:
|
Кстате еще минус использования iframe, это то что если с банерки отключиш конкретный банер, то останица пустое место, т.к. в iframe указывается высота (покрайней мере у меня,для кроссбраузерности) :(
Или можно както проверить что банер в iframe загрузился? |
Часовой пояс GMT +3, время: 04:33. |