离线加载Dymo SDK触发invalid range in character class语法错误
问题现象
- 在线加载Dymo SDK对应脚本时所有功能运行完全正常,因项目要求离线使用,将SDK脚本的返回内容完整复制后,保存到项目主目录下名为
dymo.connect.framework.js的文件中。 - 主HTML文件通过
<script src="dymo.connect.framework.js"></script>标签加载本地脚本时,控制台在代码行goog.i18n.bidi.rtlCharReg_ = new RegExp('[' + goog.i18n.bidi.rtlChars_ + ']'),处抛出Uncaught SyntaxError: invalid range in character class错误,该错误仅在离线加载本地脚本的场景下出现。
故障原因
该错误是正则字符类中存在非法范围定义导致的,仅在本地加载时触发,核心原因是文件编码错误或保存时字符被篡改:
- 在线加载时,服务端以标准UTF-8编码返回脚本,
goog.i18n.bidi.rtlChars_存储的RTL语种特殊Unicode字符解析正常,拼接生成的正则结构合法。 - 手动复制脚本内容保存到本地时,要么编辑器默认使用了非UTF-8编码(如GBK、ANSI、带BOM的UTF-8)转码破坏了特殊Unicode字符,要么复制过程中不可见的控制字符被编辑器自动过滤、替换,导致
goog.i18n.bidi.rtlChars_的原始字符集残缺,拼接正则时出现未转义的横杠,被JS引擎识别为非法的字符范围标记。
修复方法
- 不要手动全选网页内容复制保存脚本,直接通过文件下载工具拉取原始脚本文件保存到本地,从根源避免复制过程中的字符篡改。保存文件时强制选择
UTF-8 无BOM编码格式,不要使用系统默认编码。 - 如果文件保存后仍报错,直接修改报错位置的正则代码,两种改法任选其一即可:
- 给正则增加Unicode匹配模式,修正特殊字符解析逻辑:
goog.i18n.bidi.rtlCharReg_ = new RegExp('[' + goog.i18n.bidi.rtlChars_ + ']', 'u'); - 对横杠做转义处理,避免被引擎识别为范围符:
goog.i18n.bidi.rtlCharReg_ = new RegExp('[' + goog.i18n.bidi.rtlChars_ + '\\-]');
- 给正则增加Unicode匹配模式,修正特殊字符解析逻辑:
内容的提问来源于stack exchange,提问作者AnnABlue
相关产品推荐
相关产品推荐

