我有一些 .svg
文件,我想将其转换为字符串格式。我在使用 IE9 时遇到了一些问题。我知道它支持 SVG。
SVG:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="42" height="42" viewBox="0 0 42 42" version="1.1" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<g id="arrow" stroke="#b2bbbe" stroke-width="3">
<g transform="translate(14.000000, 7.000000)">
<path d="M0,0 L14.8731048,14.25 L0,28.5"/>
</g>
</g>
</g>
</svg>
JavaScript:
$.get(imgURL, function(data) {
//Get the SVG tag, ignore the rest
var $svg = $(data).find('svg');
//Create new XMLSerializer
var serializer = new XMLSerializer();
//Serialize the response
var svg_str = serializer.serializeToString($svg[0]);
}, 'xml');
目前在 Chrome、Firefox、Safari 中工作,但在 IE9 中,我收到此错误:
SCRIPT16386: No such interface supported
我不确定是 AJAX 调用还是其他原因导致了这种情况发生。查了IE文档,好像是支持这个功能的……
- http://blogs.msdn.com/b/ie/archive/2010/10/15/domparser-and-xmlserializer-in-ie9-beta.aspx
- https://msdn.microsoft.com/en-us/library/ff975252%28v=vs.85%29.aspx
关于为什么这是 IE 喷出此错误消息的任何想法?
更新: 我在没有 AJAX 请求的情况下缩减并测试了它,IE9 没有抛出错误并且一切正常运行。较小的测试如下:
//Manually inject the SVG code inline into the <body>
$('body').append('<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg id="test" width="42" height="42" viewBox="0 0 42 42" version="1.1" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><g id="avatarjs_text-forward-svg" stroke="#b2bbbe" stroke-width="3"><g id="text-change-btn" transform="translate(14.000000, 7.000000)"><path d="M0,0 L14.8731048,14.25 L0,28.5"/></g></g></g></svg>');
//Grab the SVG
var ts = $('svg#test');
//Create serializer and serialize the string
var se = new XMLSerializer();
var str = se.serializeToString(ts[0]);
那么 IE9 的 AJAX 处理与我遇到的错误消息问题之间是否存在某种联系?
最佳答案
我最终使用返回的 XML 类型数据的 .xml
属性代替 IE9。
$.ajax({
type: 'GET',
url: imgURL,
dataType: 'xml',
}).done(function(data) {
var $svg = $(data).find('svg'),
serializer = new XMLSerializer(),
svg_str;
//If an error is thrown then we just grab the
//.xml property of the returned data.
try{
svg_str = serializer.serializeToString($svg[0]);
} catch(e) {
svg_str = $svg[0].xml;
}
//Do stuff here with string
doStuffWithString(svg_str);
});
我最终使用了 try-catch block ,而不是检查 window.XMLSerializer
或 window.XMLSerializer.serializeToString
是否为 undefined
。它们都被定义了。最后,不确定这是否是最佳解决方案。所以,我仍然很想听听其他解决方案,甚至更想知道为什么 IE9 会抛出该错误。
关于javascript - IE9 : SVG Serialization and "No such interface supported" when calling serializeToString( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221307/