Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема в document.write при использовании setInterval() (https://javascript.ru/forum/misc/1907-problema-v-document-write-pri-ispolzovanii-setinterval.html)

GOll 03.10.2008 11:48

Проблема в 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(). Почему так происходит?
Как можно решить проблему?
:(

Snipe 03.10.2008 11:58

Потому что document.write() пишет в документ в тот момент когда выполняется и туда, где выполняется.

В случае с интервалом текущий документ уже закрыт для записи и document.write() перезаписывает документ.

GOll 03.10.2008 12:06

Цитата:

Сообщение от Snipe (Сообщение 6610)
Потому что document.write() пишет в документ в тот момент когда выполняется и туда, где выполняется.

В случае с интервалом текущий документ уже закрыт для записи и document.write() перезаписывает документ.

Получается такое решение не подходит, по причине того что, когда DOM загрузился он переписывает всю страницу? А можно применить FF()
var FF = function (){document.write};

к DOM элементу, наподобие innerHTML?

Андрей Параничев 03.10.2008 12:13

Нет. Вам нужно будет работать с DOM элементами, если вы хотите сделать что-то после загрузки документа.

Snipe 03.10.2008 12:15

Нет никакой разницы как оформлять, если документ уже загружен document.write() попытается его перезаписать.

Если скрипт, который вы хотите подключить после загрузки DOM, использует document.write(), то опять же - дело гиблое.

Можно, конечно, в отдельных случаях сделать замену document.write (через DOM), но это не есть карашо, не тревиально и работает через раз...

GOll 03.10.2008 12:21

Цитата:

Сообщение от Snipe (Сообщение 6614)
Нет никакой разницы как оформлять, если документ уже загружен document.write() попытается его перезаписать.

Если скрипт, который вы хотите подключить после загрузки DOM, использует document.write(), то опять же - дело гиблое.

Можно, конечно, в отдельных случаях сделать замену (через DOM), но это не есть карашо, не тревиально и работает через раз...

Получается выход один - подгружать сам скрипт после загруpки DOM AJAX-ом в нужно место, хотя как это делать ещё не разобрался :(.
А при этом способе не возникнет аналогичная ошибка? ведь document.write() там будет сидеть всеравно :confused:

Octane 03.10.2008 12:47

Вам говорят не использовать document.write вообще, если необходимо произвести какие-либо действия над готовым документом. Никакой AJAX тут не нужен.

GOll 03.10.2008 12:52

Цитата:

Сообщение от Octane (Сообщение 6617)
Никакой AJAX тут не нужен.

Тогда что сообщество может посоветовать? Выход один использовать iframe?

Octane 03.10.2008 12:56

Выход один: почитать про работу с DOM в JavaScript. Про то, как создавать и перемещать DOM-узлы. На сайте больше чем достаточно информации по этому вопросу.

Андрей Параничев 03.10.2008 14:41

Octane,
Тут немного сложнее - скрипты сторонние, в них document.write.
Не заставишь же их переписать свои скрипты, чтоб они работали после загрузки DOM.

GOll 03.10.2008 18:21

Так что выход один использовать iframe?

magistr_bender 03.10.2008 19:05

тю блин люди, а что создать динамически элемет, в который тупо через иинерХТМЛ вставить банер слабо?
просто создать спозиционированый див и в него впихнуть сам банер или любой код который надо.. делов то ...

Андрей Параничев 03.10.2008 19:33

magistr_bender,
Код в тегах <script> не выполняется при вставке через innerHTML. А если его выполнить в "другом потоке" (через eval), то вызов document.write перезапишет все содержание страницы.

GOll,
Во многих случаях iframe - не выход (например в случае google ads).
Мне понравился вариант Snipe с временной заменой document.write функцией буфферезирующей вывод, через которую потом вставляется вывод в нужный тег, через innerHTML. Это решение применимо, когда есть уверенность в том, что document.write больше нигде не используется.

GOll 06.10.2008 10:49

Цитата:

Во многих случаях iframe - не выход (например в случае google ads).
Мне понравился вариант Snipe с временной заменой document.write функцией буфферезирующей вывод, через которую потом вставляется вывод в нужный тег, через innerHTML. Это решение применимо, когда есть уверенность в том, что document.write больше нигде не используется.
Уверенности то и нет. Даже наверняка, в тех баннерах, что у меня есть, document.write используется несколько раз :(

Snipe 06.10.2008 11:17

Цитата:

Сообщение от Андрей Параничев (Сообщение 6645)
Мне понравился вариант Snipe с временной заменой document.write функцией буфферезирующей вывод, через которую потом вставляется вывод в нужный тег, через innerHTML. Это решение применимо, когда есть уверенность в том, что document.write больше нигде не используется.

Беда в том, что лично у меня с Google ads такая система работает через раз.

Т.е. при первых 2-3 загрзках все хорошо, дальше белый экран.
Возможно имеет смысл как-то скооперироваться и совместно решить данную проблему. Потому что даже на зарубежных сайтах не видел решения подобной проблемы.

А с iframe'ами, если я правильно понимаю (поправьте, если не прав), можно в iframe, куда вы ставите google ads писать немного содержимого подгружаемой страницы, например какие-либо ключевые слова или предложения. Но это по сути будет двойной загрузкой одной странички.
Или я неправ и так сделать нельзя?

GOll 06.10.2008 16:26

Цитата:

Сообщение от Snipe (Сообщение 6708)
А с iframe'ами, если я правильно понимаю (поправьте, если не прав), можно в iframe, куда вы ставите google ads писать немного содержимого подгружаемой страницы, например какие-либо ключевые слова или предложения. Но это по сути будет двойной загрузкой одной странички.
Или я неправ и так сделать нельзя?

Если я не ошибаюсь в Google ads можно настраивать вручную и прописывать тематику сайта, пути выхода всегда есть )

Snipe 06.10.2008 16:37

Цитата:

Сообщение от GOll (Сообщение 6723)
Если я не ошибаюсь в Google ads можно настраивать вручную и прописывать тематику сайта, пути выхода всегда есть )

А почему тогда ifram'ы нельзя использовать?

GOll 06.10.2008 16:42

Цитата:

Сообщение от Snipe (Сообщение 6725)
А почему тогда ifram'ы нельзя использовать?

Я не говорю что нельзя, наоборот нужно все банеры в ifram, только ключевые слова писать не нужно ;)

Snipe 06.10.2008 16:50

GOll, извиняюсь, правильно спросить так:
Цитата:

Сообщение от Андрей Параничев
Во многих случаях iframe - не выход (например в случае google ads).

Почему?

GOll 06.10.2008 17:16

Цитата:

Сообщение от Андрей Параничев (Сообщение 6645)

GOll,

Это обращения.
Цитата:

Сообщение от Андрей Параничев (Сообщение 6645)
Во многих случаях iframe - не выход (например в случае google ads).
Мне понравился вариант Snipe с временной заменой document.write функцией буфферезирующей вывод, через которую потом вставляется вывод в нужный тег, через innerHTML. Это решение применимо, когда есть уверенность в том, что document.write больше нигде не используется.

Текст обращения

GOll 06.10.2008 17:27

с iframe у меня работает. Цель обсуждения: какие есть способы загруски банеров после загруски DOM(с учетом того что они используют document.write).
И я только что узнал, что для оптимизации, iframe не желательно использовать, т.к. идут лишние запросы на сервер.
Цитата:

Сообщение от Snipe (Сообщение 6708)
Возможно имеет смысл как-то скооперироваться и совместно решить данную проблему. Потому что даже на зарубежных сайтах не видел решения подобной проблемы.

Было б круто, если всем сообществом выписать какие есть выходы, желательно с примерами :rolleyes:

GOll 06.10.2008 17:38

Кстате еще минус использования iframe, это то что если с банерки отключиш конкретный банер, то останица пустое место, т.к. в iframe указывается высота (покрайней мере у меня,для кроссбраузерности) :(

Или можно както проверить что банер в iframe загрузился?


Часовой пояс GMT +3, время: 04:33.