从字符串中捕获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');
}
<!-- 提供“代码段”对象,请参见http://meta.stackexchange.com/a/242144/134069-->
<脚本src=“http://tjcrowder.github.io/simple-snippets-console/snippet.js“></script>
Chrome控制台告诉你的是,它无法绘制包含在
d
您的属性
<path>
.
Per specs
,
路径数据中错误处理的一般规则是SVG用户
代理应呈现路径元素,直到(但不包括)路径
包含路径数据规范中的第一个错误的命令。
因此,在您的确切情况下,不会呈现任何内容,但也不会抛出任何错误。
以编程方式检测此类错误的唯一方法是
path.pathSegList.length
并检查它是否与添加到此属性中的分段数相对应。
但在IMO中,您应该在生成值时直接测试值。