如何捕获 SVG 解析错误
How to catch an SVG parsing error?
我正在尝试为我的代码编写一个单元测试(使用 qunit),该测试将 SVG 路径生成为字符串。测试之一应该是那个东西是否真的是有效的 SVG。
在 Chrome 浏览器控制台中,只需执行以下操作即可轻松进行测试:
$("<svg xmlns='"http://www.w3.org/2000/svg'"><path d='"asdsdsadas'" /></svg>")
这将失败,并显示相应的错误消息:
错误:属性 d="asdsdsadas"的值无效
但是,它也返回无效文档,就像它本来可以一样。
当我在 qunit
中运行此代码时,错误会打印到浏览器控制台中,但单元测试仍然成功,因为它实际上并不是一个例外。我试图抓住它也没有成功。
我已经尝试覆盖console.error
,但显然此错误起源于更深层次,不关心 JavaScript 的技巧。
有人知道如何正确识别此错误吗?
从字符串中捕获 svg 解析错误的正常方法是使用 DOMParser()
对象。
如果确实将无效字符串传递给 parseFromString()
方法,则 DOMParser 将返回错误文档。
var invalidMarkup = "<svg xmlns='"http://www.w3.org/2000/svg'"><path d'"M0,0'" /></svg>";
var oParser = new DOMParser();
var doc = oParser.parseFromString(invalidMarkup, 'image/svg+xml');
var failed = doc.documentElement.nodeName.indexOf('parsererror')>-1;
if(failed){
snippet.log('failed to load the doc : '+doc.documentElement.nodeName);
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
但是您在问题中给出的标记是有效的 svg+xml 标记。
解析器不会抱怨它。
var yourMarkup = "<svg xmlns='"http://www.w3.org/2000/svg'"><path d='"asdsdsadas'" /></svg>";
var oParser = new DOMParser();
var doc = oParser.parseFromString(yourMarkup, 'image/svg+xml');
var failed = doc.documentElement.nodeName.indexOf('parsererror') > -1;
if (failed) {
snippet.log('failed to load the doc : ' + doc.documentElement.nodeName);
} else {
snippet.log('success');
}
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Chrome控制台告诉您的是,它无法绘制<path>
的d
属性中包含的整个句段。
根据规格,
路径数据中错误处理的一般规则是 SVG 用户 代理应呈现路径(但不包括)路径的"路径"元素 命令包含路径数据规范中的第一个错误。
因此,在您的确切情况下,不会呈现任何内容,但也不会引发任何错误。
以编程方式检测此类错误的唯一方法是获取path.pathSegList.length
并检查它是否与您添加到此属性中的段数相对应。
但是 IMO,您应该在生成值时直接测试您的值。
相关文章:
- 传递数组以馈送 svg.js 的折线数组方法会引发错误
- svg,多边形,JS函数错误
- jQuery SVG创建折线,firefox错误
- 将“;d”;chrome中Snap.svg错误的值
- 这个文件中的错误在哪里.svg脚本(使用 ecmascript)
- jQuery SVG插件转换动画错误
- 使用 cURL 请求 svg.sencha.io 时请求错误
- svg-import.js导入错误“SVG导入得到意外的类型sodipodi:namedview”
- Safari 中的 SVG SMIL 动画错误
- 如何捕获 SVG 解析错误
- 捕捉 svg 动态:定位错误
- Internet Explorer 9 中的类型不匹配错误:将<标题>添加到内联 SVG
- D3.js SVG 图像拖动有效,但引发许多类型错误
- svg>并且<rect>谷歌折线图中的内联样式错误
- 使用Canvg将svg转换为png:"target.childnodes未定义“;错误
- svg形状嵌套在形状中--没有解析错误
- 包含foreignObject的可滚动SVG中的错误
- SVG将画布IE安全错误保存到DataURL
- 当试图访问对象中的svg时,在chrome上出现错误
- 调试!SVG logo &提示错误