如何让WebStorm识别Thunderbird扩展中的DTD实体引用?
解决WebStorm中Thunderbird扩展XUL/XHTML文件的DTD实体未解析问题
问题说明
你用WebStorm 2023.1开发Thunderbird扩展时,XUL/XHTML文件里的DTD实体占位符(比如 <label value="&spaceBetweenParagraphs.label;"/>)会被WebStorm报错:Unresolved entity reference spaceBetweenParagraphs.label。虽然文件里已经引用了DTD:
<!ENTITY % bdmDTD SYSTEM "chrome://bidimailui/locale/bidimailui-prefs-dialog.dtd"> %bdmDTD;
但这个chrome://协议的URI只有扩展在Thunderbird里加载后才有效,本地源码的locale目录下有不同语言的子目录,需要让WebStorm识别指定的本地DTD文件(比如en-US版本)。
配置步骤
方法1:用XML Catalog映射URI到本地文件(推荐)
这是全局生效的方案,所有引用该URI的文件都会自动关联到指定DTD:
- 打开WebStorm的Settings/Preferences(Windows/Linux按
Ctrl+Alt+S,Mac按Cmd+,) - 找到Languages & Frameworks > Schemas and DTDs > XML Catalog
- 点击右上角的
+,选择Add External DTD - 在弹窗里:
- URI栏填DTD引用里的完整路径:
chrome://bidimailui/locale/bidimailui-prefs-dialog.dtd - File栏点击文件夹图标,选中本地源码里的
locale/en-US/bidimailui-prefs-dialog.dtd文件
- URI栏填DTD引用里的完整路径:
- 点击
OK保存,重启WebStorm后生效
方法2:给单个文件临时关联本地DTD
如果XML Catalog方案没生效,或者只需要针对单个文件处理:
- 打开报错的XUL/XHTML文件
- 在顶部的DTD引用下方,手动添加本地DTD的引用(注意:这只是给WebStorm识别用,打包扩展前要删掉这几行):
<!-- WebStorm识别专用,打包时删除 --> <!ENTITY % localDTD SYSTEM "./locale/en-US/bidimailui-prefs-dialog.dtd"> %localDTD;
- 也可以临时禁用该检查:右键编辑器空白处→Configure Inspections→找到XML > Unresolved entity reference→取消勾选
注意点
- 多个DTD文件的话,重复XML Catalog的添加步骤即可
- 方法2的手动引用不要留在最终代码里,避免打包后出现无效路径
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

