javascript - JSON 中的结束脚本标记导致 chrome 解析器错误

标签 javascript html google-chrome

var c= {"Content":"</SCRIPT>"}

在 Chrome 中给出解析器错误。 逃避工作...

https://jsfiddle.net/OndrejSpilka327/banr9836/

这真的是 chrome 错误吗?

编辑 我不认为这个论证是正确的。 HTML 解析器应该与 JavaScript 解析器无关。 首先,包含在其中的任何内容都应该被解析为 JavaScript,而不是 HTML。这绝对是 HTML 解析器的错误实现。

为了满足您的好奇心:

var c= {"Content":"<SCRIPT></SCRIPT>"}
console.log(c.Content);

在 JSFiddle 中产生 sam 错误...这绝对是格式正确的。

有人可能会再次争论 SCRIPT 标签不能出现在外部 SCRIPT 标签内,但是 SCRIPT 标签中包含的任何内容都应该被解析为脚本而不是 HTML,尤其是在常规字符串文字中转义时。

这样的论点只会提倡糟糕的实现。

显然,在处理序列化为 json 并保留在 SCRIPT 标记中的自定义内容时,该行为会产生错误。

只是好奇你删除了 Felix 的哪些标签以及为什么?

最佳答案

不,这不是 Chrome 错误。 HTML 解析器不了解 JavaScript,它会关闭 <script>第一次出现 </script> 时标记它发现的。如果它位于 JavaScript 程序的中间,您最终会得到一个无效的程序。

任何具有特殊含义但不应该用该特殊含义解释的字符序列都需要转义或拆分。

另请参阅Why split the <script> tag when writing it with document.write()?

关于javascript - JSON 中的结束脚本标记导致 chrome 解析器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792128/

相关文章:

html - Doctype html - 后面需要一个 html 标签吗?

javascript - Node.js 创建一个模块来收集内存(ram)信息?

javascript - offsetHeight/clientHeight/scrollHeight 永远不会改变

javascript - 使用ajax和jquery发送id

c# - 静态下拉列表填充不正确的值

javascript - 直接在 Chromium 中编辑纯 JavaScript 扩展

ruby-on-rails - Rails 服务器错误,在 requests.accepts : "[\"\\xE2\\x80\\x8B/\\xE2\\x80\\x8B\"]" 中有奇怪的符号

google-chrome - chrome 26.0.1410.43 中与旧版本的渲染差异

javascript - 如何在 Ember JS 中获取模型数据

javascript - 调整整列的大小