全盘崩坏
全盘崩坏
  • 发布:2020-08-17 17:58
  • 更新:2020-08-17 21:00
  • 阅读:1466

【报Bug】在vue页面script代码中再次出现script时,编译将会报语法错误

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 10.14.6

HBuilderX类型: 正式

HBuilderX版本号: 2.8.6

浏览器平台: Chrome

浏览器版本: 81

项目创建方式: HBuilderX

示例代码:
export default {  
  // <script></script>  
  data() {  
    return {  
        text: "<script></script>"  
    }  
  }  
}  

操作步骤:

复现1:在js代码中定义一个字符串,其中包含<script></script>的子串,发行的编译阶段将会报错

复现2:在js代码中任意位置添加注释 // <script></script>,发行的编译阶段也将会报错

预期结果:

字符串中包含<script></script>时可以正确解析
注释带有<script></script>时可以正确解析

实际结果:

非有效的<script></script>不能正确解析

bug描述:

在vue页面script代码中再次出现script时,编译将会报语法错误

复现1:在js代码中定义一个字符串,其中包含<script></script>的子串,发行的编译阶段将会报错

复现2:在js代码中任意位置添加注释 // <script></script>,发行的编译阶段也将会报错

2020-08-17 17:58 负责人:无 分享
已邀请:
jxtian

jxtian

解析器在解析 JS 时,需要先解析到开始标签 <scrpit> 和结束标签 </scrpit>,再按 JS 语法解释标签内的代码。在解析到你的字符串和注释时,就成了 <script><script> 了,标签未闭合。

需要做转义:

text: '\<script\>\<\/script\>'

  • 全盘崩坏 (作者)

    我也知道<script>属于语法标记,但是前提是他是有效的啊,在注释中的任何东西对编译器来说本就是没有任何意义的,仅仅是对开发者提供帮助而已,显然注释中的代码参与编译,这属于编译漏洞,包括字符串中出现的<script>也一样的,他实质就是字符串,并不是有效的js代码但是字符串内容却参与了语法解析,希望还是可以修复这两个编译漏洞

    2020-08-18 17:05

该问题目前已经被锁定, 无法添加新回复