我正在研究一个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>
,首先我认为这是一个错误,并尝试删除多余的引号和加号,然后显示错误的字符串。
我很困惑,为什么它必须像</scri" + "pt>
一样?
答案 0 :(得分:2)
因为HTML解析器将找到字符“ </script>
”的序列,并结束脚本元素。然后它将无效的JavaScript传递给JavaScript解析器。
这是一个简化的示例:
<script>console.log("</script>");</script>
▲ ▲ ▲▲ ▲ ▲
1 2 34 5 6
console.log("
-不是可编译的脚本)。");
)中以纯文本显示的文本一种更优雅的方法是逃避/
:
<script>console.log("<\/script>");</script>