【问题标题】:How to disable parsing code in script tags using JavaScript DOMParser?如何使用 JavaScript DOMParser 禁用脚本标签中的解析代码?
【发布时间】:2022-01-25 17:20:27
【问题描述】:

我有以下带有 JavaScript 标记的文本文件:

<script>
...
</script>
<script>
...
</script>
<script>
...
</script>

当我像这样解析它时:

const parser = new DOMParser();
const xmlDoc = parser.parseFromString(`<root>${data}</root>`, "text/xml");
const tags = xmlDoc.getElementsByTagName("script");

我得到一个错误,因为 JS 程序代码中有 符号,比如

for (let i = 0; i < tags.length; i++) {

我不想将 替换为 < >因为这些也存在于代码中的字符串中。

是否可以禁用脚本标签内的解析代码?

【问题讨论】:

  • 无法重现错误。
  • 请提供一个可运行的minimal reproducible example 来演示错误
  • @Spectric 在使用 text/xml 解析 &lt;script&gt;'&lt;'&lt;/script&gt; 时出错,因为它是有效的 HTML 但无效的 XML
  • 嗯,您正在尝试将非格式良好的 XML 解析为 XML。会有错误。 DOMParser 中没有 per-tag 配置;实际上,除了传递给parseFromString 的 MIME 类型之外,根本没有任何配置。

标签: javascript domparser


【解决方案1】:

为了解析 HTML,我们使用 mime 类型text/html

const htmlDoc = parser.parseFromString(data, "text/html");
const tags = htmlDoc.getElementsByTagName("script");

【讨论】:

    【解决方案2】:

    尝试将 JS 代码封装在 CDATA section 中 所以它看起来像:

    <script>
       <![CDATA[
          for (let i = 0; i < tags.length; i++) {....
      ]]>
    </script>
    

    这些 cmets 告诉 xml 解析器仅将其中的内容视为字符数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多