Подтвердить что ты не робот

Что это значит: document.write('<scr' + 'ipt... "?

Я видел это на каждом Yahoo! страница новостей, внизу исходного кода,
и не смогли понять, почему они разбивают слово script.

Кто-нибудь знает, есть ли причина для этого?

document.write("<scr"+"ipt language=javascript src=http://l.yimg.com/d/lib/bc/bc_2.0.4.js></scr"+"ipt>");
4b9b3361

Ответ 1

Рассмотрим этот упрощенный пример:

<script>
document.write("something </script> something");
</script>

Обозреватель HTML-браузера увидит </script> в строке JavaScript и интерпретирует это как конец элемента script.

Парсер HTML не знает о синтаксисе JavaScript - все, что он знает, это то, что элемент <script> заканчивается на следующем </script>.

(Он также знает, что вы не можете иметь вложенные элементы <script>, следовательно, разрыв открытия <script>, а также закрытие </script> в вашем примере.)

Ответ 2

Предположим, вы пишете инструмент, который обнаруживает начало и конец блоков script в куске текста. Предположим, вы видите

<blah><blahdeblah><script>

blah blah blah

blah

print("</script>")

print("<script>")

blah

</script>

</blahdeblah></blah>

Не зная синтаксиса языка script, как ваш инструмент знает, что это ONE script блок, а не TWO script блокирует с ") blah между ними?

Веб-браузер - такой инструмент. Это разумная практика, чтобы вы никогда не путали веб-браузер, никогда не имея <script> или </script> в вашем файле, если он фактически не является тегом script.

Ответ 3

чтобы он не оценивался, а вводился как строка.

Ответ 4

Это плохой способ предотвратить критические проверки XML/XHTML и HTML с исходным кодом.

Ответ 5

Некоторые браузеры склонны "действовать" быстро, когда анализируют документ и сразу же пытаются выполнить javascript, когда они находят тег script (даже если он сам находится в куске js). Чтобы избежать этого, они нарушают декаляцию тега.

Ответ 6

Подробнее об этом см.:
  http://www.wwco.com/~wls/blog/2007/04/25/using-script-in-a-javascript-literal/

Короткий ответ заключается в том, что ваш код анализируется двумя дискретными шагами.

Первый - это XML. И это означает, что элемент <SCRIPT> ищет </SCRIPT> . Важно помнить, что элементы XML являются агностическими. Это означает, что парсер еще не знает, что там есть JavaScript.

Как только он содержит содержимое <SCRIPT> элемент, то он обрабатывает кусок текста, который предположительно является JavaScript.

Разделив тег оператором конкатенации строки, вы запретите константу отключать фазу XML.

Одно простое решение - положить & lt; и & alpha; в тексте Javascript.