我有一些.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文档,似乎支持这个功能...
关于为什么这是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处理和我收到错误消息的问题之间是否存在某种联系?
答案 0 :(得分:1)
我最终使用返回的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块而不是检查window.XMLSerializer
或window.XMLSerializer.serializeToString
是undefined
。它们都是定义的。最后,不确定这是否是最佳解决方案。所以,我仍然喜欢听到任何其他解决方案,或者更多的是为什么IE9会抛出这个错误。