Раздел вопрос-ответ Зачем пишут в js "scr" + "ipt" c конкатенацией?

Зачём пишут так? Неоднакратоно такое видел в исходном коде. Почему бы не вставить скрипт сразу в тело? И зачем тут конкатенация строк?

<body>
<h1>Caption</h1>
<script type="text/javascript">
    document.write('<scr' + 'ipt>bla-bla-any-code</scr' + 'ipt>');
</script>

Таких примеров в исходных кодах видел не мало на реальных сайтах с конкатенацией в '<scr' + 'ipt>'

 

share
 
Это в исходном html коде страниц, кэш тут совсем не причём
root 7 лет назад
 
почисти кэш
– anonymous 8 лет назад
 
Это где такое?
ggg 8 лет назад

1 ответ

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

Т.е. сначала загружается вся страница. Затем начинает выполняться javascript, который после выполнения операции конкатенации делает document.write. Только после document.write - начинает выполняться код bla-bla-any-code внутри <script>.

Как по мне, то спорный способ, я бы так не делал. Это css блокирует отображение страницы, пока не загрузится, а javascript как по мне лучше всего вставлять либо в <head> либо прямо перед закрытием </body> и не использовать такие стрёмные способы. И вот доказательство:

<html>
<head>
     <script type="text/javascript">
        alert("first");
    </script>
</head>
<body>
    <div class="box"></div>
    <script type="text/javascript">
        document.write('<scr' + 'ipt>alert("second");</scr' + 'ipt>');
    </script>
    <script type="text/javascript">
        alert("third");
    </script>
</body>
</html>

http://jsfiddle.net/ft9e69bL/1/

При выполнение этого примера кода, javascript выполнился в порядке first->second->third, то есть эта конкатенация не отложила выполнение кода. Если alert в примере заменитиь на console.log, результат останется прежним.

Кроме того, в свежей версии Хрома еще и violation в консоли будет:

Violation] Avoid using document.write()

 

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться