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

标签 javascript internet-explorer svg internet-explorer-9

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

关于javascript - IE9 : SVG Serialization and "No such interface supported" when calling serializeToString( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30221307/

相关文章:

html - 输入文件未在 IE 上打开文件上传框

javascript - 如何在 2 个 SVG 之间交替转换

svg - 在 JavaFX 上的按钮中加载 SVG 文件

java - 我可以创建没有 svg 文件的 JSVGCanvas 吗?

javascript - 正则表达式匹配较长的项目

javascript - 如果用户不接受 cookie,则禁用 HTTP 严格传输安全 (HSTS)

javascript - 第 0 行堆栈溢出

javascript - VueJS 加载更多博客文章

javascript - 简单的 HTML 页面不加载 Javascript Hello World

jquery - 可以修改这个 jQuery 以使其运行得更快吗?