Зачем разбивать скрипт закрывающим тегом на строку? - PullRequest
0 голосов
/ 27 марта 2019

Я работаю над проектом asp.net, и частично мне нужно было напечатать часть страницы, которая содержит изображение, используя javascript.После некоторого копания я нашел код, и он отлично работает.

<script>


function VoucherSourcetoPrint(source) {
    return "<html><head><script>function step1(){\n" +
            "setTimeout('step2()', 10);}\n" +
            "function step2(){window.print();window.close()}" +
            "\n</scri" + "pt></head><body onload='step1()'>\n" + <%-- lokk this line--%>
            "<img src='" + source + "' style='width: 300px; height: 150px; margine:none;' /></body></html>";
}

function VoucherPrint(source) {    
    Pagelink = "about:blank";
    var pwa = window.open(Pagelink, "_new");
    pwa.document.open();
    pwa.document.write(VoucherSourcetoPrint(source));
    pwa.document.close();
}


</script>

Как видно из первой функции, она возвращает строку, и в ней есть закрывающий скрипт скрипт, который записывается как </scri" + "pt>, сначала я подумал, что это ошибка, и попытался удалить лишние кавычки и знак плюс, а затем строку с ошибкой.

enter image description here

Я запуталсяпочему это должно быть похоже на </scri" + "pt> ??

1 Ответ

2 голосов
/ 27 марта 2019

Поскольку анализатор HTML найдет последовательность символов "</script>" и завершит элемент скрипта .Затем он передает недопустимый JavaScript в синтаксический анализатор JavaScript.

Вот упрощенный пример:

<script>console.log("</script>");</script>
▲       ▲           ▲▲        ▲  ▲
1       2           34        5  6
  1. Начальный тег элемента скрипта.
  2. Начало JavaScript (console.log(" - не компилируемый скрипт).
  3. Конец JavaScript
  4. Конечный тег элемента скрипта
  5. Текст для отображения в виде простого текстатекст в документе HTML (");)
  6. Конец сценария для без соответствующего открытого тега.Отклонено парсером HTML как ошибка.

Более элегантный подход - просто экранировать /:

<script>console.log("<\/script>");</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...