Что это значит: 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>");
Ответы
Ответ 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.