uni-app 字符串被当作结束标记 <body> 标签问题

uni-app 字符串被当作结束标记 <body> 标签问题

| 开发环境 | 版本号 | 项目创建方式 |
|----------|--------|--------------|
| HbuilderX | 3.96   |              |

# 操作步骤:
~~

# 预期结果:
~~

# 实际结果:
~~

## bug描述:
如题

![image](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20231105/bb1a3fc4c79b6098589d781468f317e7.png)
3 回复

此问题是你写的不对, 标签注释不能 写在js里面,使用浏览器打开html文件也会解析错误 在这个HTML文件中,你添加了一个JavaScript注释// xxx</body>xxx 在<script>标签内部,这会导致问题,因为这个注释包含了类似于HTML标签中的</body>的字符。
JavaScript注释应该是安全的,不会干扰HTML的解析。但是,当注释内容包含类似于HTML标签的字符时,这可能会导致问题。在你的注释中,</body>类似于HTML闭合</body>标签,浏览器会误解它为HTML标签而不是JavaScript注释。
要解决这个问题,你可以避免在JavaScript注释中使用类似于HTML标签的字符,或者将注释中的字符进行适当的转义,以确保它们不会与HTML标签产生冲突


1 浏览器解析时不会因为JS的注释中出现字符串</body>造成出错 2 JS中出现字符串</body>是因为要用到字符串组装HTM传递给打印插件,要用到的就不好避免

uni-app 开发过程中,如果你遇到字符串被当作结束标记 <body> 标签的问题,通常是因为在模板中使用了某些特殊字符或字符串,导致解析器误认为这是 HTML 标签的结束标记。

常见原因及解决方案

  1. 字符串中包含 <> 字符

    • 如果你在模板中直接使用了 <> 字符,解析器可能会将其误认为是 HTML 标签的开始或结束。
    • 解决方案:使用 HTML 实体编码来替代这些字符。例如:
      <view>{{ '&lt;body&gt;' }}</view>
      或者使用 v-html 指令来渲染 HTML 内容:
      <view v-html="'<body>'"></view>
  2. 字符串中包含 </body>

    • 如果你在模板中直接使用了 </body>,解析器会认为这是 HTML 文档的结束标记。
    • 解决方案:同样使用 HTML 实体编码或 v-html 指令:
      <view>{{ '&lt;/body&gt;' }}</view>
      或者:
      <view v-html="'</body>'"></view>
  3. 动态绑定字符串

    • 如果你通过 {{ }}v-bind 动态绑定字符串,确保字符串内容不会包含未转义的 HTML 标签。
    • 解决方案:在绑定之前对字符串进行处理,确保特殊字符被正确转义。

示例

假设你有一个字符串 "<body>",你希望在页面中显示它,而不是被解析为 HTML 标签:

<template>
  <view>
    <!-- 使用 HTML 实体编码 -->
    <view>{{ '&lt;body&gt;' }}</view>
    
    <!-- 使用 v-html 指令 -->
    <view v-html="'<body>'"></view>
  </view>
</template>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!