Внутри тега
<svg><script> браузер обрабатывает содержимое не как HTML, а как JavaScript-код. При этом действует важное правило парсера:Внутри <script> только текстовые узлы становятся JavaScript-кодом.
Комментарии или вложенные SVG/HTML-элементы удаляются парсером.
Это приводит к интересному эффекту. Если написать что-то вроде:
<svg><script>al<//looks like js comment>ert(document.domain)</script>
или
<svg><script>al</h1>ert(document.domain)</script>
то последовательность внутри не считается JS-комментарием, и не считается HTML-элементом, а попадает под категорию «некорректный HTML-тег» 💲
HTML-парсер пытается «исправить» такую конструкцию — он удаляет невалидный HTML,
оставляя от исходного текста только:
al + ert(document.domain) → alert(document.domain)
