IE9:调用 serializeToString( ) 时的 SVG 序列化和 "No such interface supported"

IE9: SVG Serialization and "No such interface supported" when calling serializeToString( )

我有一些 .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 处理与我遇到的错误消息问题之间是否存在某种联系?

我最终使用返回的 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.XMLSerializerwindow.XMLSerializer.serializeToString 是否为 undefined。它们都被定义了。最后,不确定这是否是最佳解决方案。所以,我仍然很想听听其他解决方案,甚至更想知道为什么 IE9 会抛出该错误。