Pull to refresh

Comments 8

А почему бы не использовать для этих целей innerHTML или createElement? Зачем такие сложности?
Вся суть в том, что если внутри вставляемого кода (как показано в примере ниже), есть свой document.write, то он сработает неверно.

Пример:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <div id="container"></div>
        <div>Some other data</div>

        <script>
            var div = document.getElementById("container");
            div.innerHTML =
                "<" + "script>document.write(\"<\"+\"div>Writen data inner HTML<\" +\"/div>\");<" + "/script>";
            var script = document.createElement("script");
            script.innerHTML = "document.write(\"<\"+\"div>Writen data created script<\" +\"/div>\");";
            div.appendChild(script);
        </script>
    </body>
</html>


В итоге получим:
Some other data
Writen data created script


А не:
Writen data inner HTML
Writen data created script
Some other data


Все из-за того, что первый скрипт вообще не будет запущен, а когда будет запущен второй скрипт, то указатель записи сместится на последний тег — перед завершением body/.

В статье упоминалось, что
скрипты могут содержать document.write

Если баннерная сеть предлагает использовать document.write, то может нахрен такую баннерную сеть?

Не, серьёзно, в наше время, когда космические корабли бороздят просторы Вселенной и большинство js-девелоперов даже знает, куда ставить var, использовать методы эпохи раннего прото-DHTML как-то не труъ.
Этот вопрос больше относится к рекламным сетям, коей мы не являемся.Какой рекламной сетью пользоваться, это дело личных предпочтений и выбора пользователя, отказываться от рекламных сетей, практикующих document.write или нет. Хотя, зачастую, вебмастер, в первую очередь, обращает внимание на эффективность рекламной сети и доход, который она ему приносит. Технологии в этом случае второстепенны.
К слову, синхронный вариант РСЯ и Adsence использует document.write. Если точнее, то синхронный Яндекс не испольует document.write, а синхронный использует во всю. Синхронный Adsence тоже использует. Но и там, конечно же есть асинхронный вариант. Так если обе эти крупнейшие сети до сих пор поддерживают оба варианта, значит это кому-нибудь нужно.
Вот так как всегда мечтания о хорошем коде разбиваются о суровую маркетинговую реальность.

Грустно читать, что адсенс вставляется через какой-то адский механизм с прямой записью в документ, в то время как кнопочки гуглоплюса вставляются гибко и изящно. Хотя, может, это делается для обратной совместимости
Чем больше людей вы научите подменять глобальный document.write, тем меньше сайтов смогут использовать ваше решение (просто потому что при двойной подмене одно из решений перестанет работать).
А все почему? Потому что не нужно лезть в глобальную область видимости, а тем более использовать такие устаревшие методы.
Наше решение запоминает document.write родительского сайта и проверяет, свой ли вызов document.write произошел — если этот вызов был с родительского сайта — передает его тому document.write, который был подменён. Так что для родительского сайта все остается прозрачно. Хотя в общем случае манкипатчинга, конечно, нужно избегать.
Only those users with full accounts are able to leave comments. Log in, please.

Articles