Зачем использовать document.write? - PullRequest
18 голосов
/ 17 февраля 2009

Мне было интересно, почему объявление все еще использует подход document.write для вставки надстройки на страницу

<script language="javascript" type="text/javascript">
    document.write("<script type='text/javascript' src='http://addomain/someadd.js'><\/sc" + "ript>");
</script>

Почему я не могу просто поставить

<script type='text/javascript' src='http://addomain/someadd.js'></script>

Вместо объявления?

Ответы [ 9 ]

8 голосов
/ 06 мая 2011

Традиционный тег script блокирует страницу во время загрузки и выполнения. Скрипт, загруженный с document.write, будет работать асинхронно. Вот почему вы видите это в рекламе или аналитике, поскольку такие сценарии не влияют непосредственно на содержимое страницы.

5 голосов
/ 23 сентября 2009

Зачастую к этим внедренным сценариям document.write прикрепляются динамические строки, чтобы выйти из кэширования или отправить некоторую информацию о клиенте на рекламный сервер. Я подозреваю, что ваш пример начинался как-то так

document.write("<script type='text/javascript' src='http://addomain/someadd.js?"+extrastuff+"'><\/sc" + "ript>");

, но со временем его подправили, или он был скопирован и изменен кем-то, кто не понимал ничего лишнего. Но, как вы написали, нет никакой разницы: два способа, которые вы цитируете в своем вопросе, функционально одинаковы.

5 голосов
/ 29 августа 2009

Я работаю с компанией, занимающейся веб-рекламой, и из того, что я слышал, некоторые браузеры (не знают, какие именно) позволят вам добавлять теги сценариев на страницу, но не позволяют автоматически выполнить их содержимое.

Итак, чтобы осуществить это, вам нужно разбить тег скрипта на части, чтобы браузер воспринимал его не как тег скрипта, а как старые HTML-данные. Затем, когда DOM обрабатывается последовательно, следующая вещь, которую он оценивает после записи тега script: эй, тот тег сценария, который вы только что написали.

На этом этапе тег сценария оценивается и выполняется.

2 голосов
/ 17 февраля 2009

Я исправлен, сценарии, созданные в doc.write блокируют - хуже, чем я, хе :) - но в качестве избегающего adblock он действительно слаб, поэтому я могу только заключить, что механизм SOP для динамического добавления параметров в запрос сценария с чрезмерным использованием.

Используйте технику вставки DOM, избегая дочерних блоков скриптов.

1 голос
/ 17 февраля 2009

Этот метод позволяет избежать загрузки внешнего сценария, если активный сценарий отключен.

0 голосов
/ 16 января 2014

Способ сделать это несколько менее вероятным, их добавление заблокировано.

0 голосов
/ 23 сентября 2009

ИМХО, это не только бессмысленно, но даже неправильно. Угловые скобки не экранированы, что сделает документ технически недействительным HTML (даже если он будет работать во всех основных браузерах, потому что они пытаются восстановиться после ошибок кодеров). И если кто-то обслуживает свой сайт со страницами XHMTL как application/xml+xhtml, document.write() просто не будет работать вообще.

0 голосов
/ 17 февраля 2009

Чтобы сопоставить это с регулярным выражением и удалить легко:

<script type='text/javascript' src='http://addomain/someadd.js'></script>

, но другой более сложный и может быть записан в разных форматах.

Я думаю, что это причина.

0 голосов
/ 17 февраля 2009

Не знаю наверняка, но они могут использовать его, поэтому весь контент на сайте загружается и сначала показывается пользователю, а затем загружаются и показываются объявления.

...