包含</ script>的javascript变量

neo*_*key 6 javascript

我需要一些帮助.我必须创建一个包含更多javascript的javascript字符串,然后将其写入父窗口中的div标签.代码如下:

<script language="javascript" type="text/javascript">
var jstr2 = '';
jstr2 += '<script language="javascript">\n';
jstr2 += 'function doPagingProducts(str) {\n';
jstr2 += 'document.frmPagingProducts.PG.value = str\;\n';
jstr2 += 'document.frmPagingProducts.submit()\;\n';
jstr2 += 'return false\;\n';
jstr2 += '}\n';
jstr2 += '</script>\n';
jstr2 += '\n';
</script>
Run Code Online (Sandbox Code Playgroud)

但是,创建的字符串中的结束脚本标记实际上关闭了javascript,我得到的错误如下:

Error: unterminated string literal
Line: 135, Column: 9 ( The </script> line before the end of the string.)
Source Code:
jstr2 += '
Run Code Online (Sandbox Code Playgroud)

有什么办法可以防止这个问题..?

非常感谢你的帮助.

最诚挚的问候,保罗


编辑 我终于通过</script>从javascript字符串中提取final 来解决这个问题.我添加了脚本显示的结束标记.它凌乱,但它的工作原理.非常感谢您的所有评论.

Mic*_*man 18

SCRIPT标签内容无关,所以解析器只是不断通过内容运行,直到它找到一个/ SCRIPT序列.如果是这样,它会将找到的内容传递给JS环境进行评估.这会为您提供未终止的文字错误,因为发送的内容会在/ SCRIPT开始的地方结束.(没有为JS解析器找到终止引号).

用反斜杠转义斜杠

jstr2 += "<\/script>";
Run Code Online (Sandbox Code Playgroud)

或者一些其他的工作,在这里休息破解序列中的触发点,并解决了这个问题(但仍给你留下了一些非常可疑代码).


Rya*_*ney 6

把它写成:

jstr2 += '<\/script>\n';
Run Code Online (Sandbox Code Playgroud)


vol*_*ron 4

您必须拆分字符串:

jstr2 += '<' + '/script>\n';
Run Code Online (Sandbox Code Playgroud)

最好注释掉脚本中的所有内容:

<script type="text/javascript">
<!--//
    // your code here
//-->
</script>
Run Code Online (Sandbox Code Playgroud)

或者在 HTML 中:

<script type="text/javascript">
//<![CDATA[
    // your code here
//]]>
</script>
Run Code Online (Sandbox Code Playgroud)

或者在 XHTML 中:

  • 与 HTML 相同,但 #PCDATA 而不是 CDATA。