在AJMA请求中动态生成的大型SVG文件在IE9中无法正确加载

时间:2013-09-10 10:55:56

标签: javascript svg internet-explorer-9

我有一个具有大量控件的应用程序,它使用AJAX来获取一些客户端属性,如高度和宽度,然后服务器生成一个大型SVG地图并返回响应。在响应的情况下,我无法加载响应SVG文件(其大小为14 MB),因为响应到达时没有事件触发(我尝试使用DOMContentLoaded和OnLoad但没有运气)。当我尝试在javascript中访问SVG的元素时遇到错误,我认为DOM还没有准备好。如何确保加载大型SVG文件。在动态生成SVG文件的情况下,当DOM准备就绪时,是否有可以连接的事件? 我采取的步骤来解决问题(但没有运气)  我尝试在JavaScript中生成响应SVG的克隆但没有运气,因为当我尝试访问SVG的一个元素时,我得到了一个异常。我需要一些关于如何使用Javascript(任何事件?)在IE9中加载相对较大的SVG文件的建议,因为我已经能够在Chrome和FireFox中成功加载这些文件。

一小段示例代码,用于说明使用SVGLoad事件后的问题。

   var SVG=document.getElementById('gwmroot');
   SVG.addEventListener("SVGLoad","LoadSVG",false);
   function LoadSVG()
    {
      var _gwmcore.svgDoc=document;
     }

在上面的代码中,SVG文件存在于文档对象中,它动态地响应Ajax请求,之后回调发生在包含上述代码的javascript文件中。我无法以某种方式调用LoadSVG函数。 _gwmcore是一个全局对象,它将具有处理svg文档的方法和属性。

提前致谢 Phaneendra

1 个答案:

答案 0 :(得分:0)

使用SVG,您正在寻找SVGLoad event。它碰巧被映射到一个名为load的属性,但如果你正在使用addEventListener它是SVGLoad你需要查找而不是加载。 E.g。

rootElement.addEventListener("SVGLoad", handler, useCapture) 

SVG的另一个问题是SVGLoad事件不会转到窗口对象,所以你不能像使用html一样做window.addEventListener。