javascript - innerHTML 自动对 HTML 字符串的部分进行转义?

标签 javascript html dom escaping

我必须使用innerHTML 将包含内联事件处理程序的html 代码字符串注入(inject)到元素中。像这样的事情:

document.getElementById('some-div')
  .innerHTML = '<button onclick="alert(\'&lt;html&gt;\');">&lt;html&gt;</button>';

我期望得到这个结果:

<button onclick="alert('&lt;html&gt;');">&lt;html&gt;</button>';

但实际的 DOM 看起来像这样:

<button onclick="alert('<html>');">&lt;html&gt;</button>';

为什么浏览器会自动转义内联事件处理程序部分?可以在不双重转义的情况下防止这种情况吗?

最佳答案

当您通过设置 Element.innerHTML 将 HTML 数据传递到浏览器时,浏览器必须解释/解析 HTML 才能呈现它。即使它没有专门渲染 onclick 属性,它仍然必须解析编码。正如 Chris Barr 所说,你必须重新编码字符串,以便浏览器解析它时,它会解析成正确的版本。

使用简单的 HTML 编码器,如 https://opinionatedgeek.com/codecs/htmlencoder ,您可以重新编码该字符串,它应该返回“<html>”。

关于javascript - innerHTML 自动对 HTML 字符串的部分进行转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55910549/

相关文章:

javascript - 检查用户是否可以打开网站中的文件类型

javascript - 禁用嵌入的 html

javascript - 了解 Google map API(简单 map )的代码,以便将其实现到网站中?

javascript - jQuery 与普通 javascript : differences between append and appendChild when building DOM tree

javascript - jquery 在通过变量作为 id 追加后访问元素

javascript - Webview 未捕获 javascript 触摸事件

JavaScript执行顺序

html - 是否有可能使用宽度为 1024px 的包装器进行全宽下拉?

jquery - 分区宽度问题

javascript - 如何在 React 中重置 'Enter' keyUp 上的输入字段?