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

Large SVG files that are generated dynamically on an AJAX request are not loading properly in IE9

本文关键字:IE9 加载 文件 大型 请求 AJAX 动态 SVG      更新时间:2023-09-26

>我有一个有很多控件的应用程序,它使用 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 文档的方法和属性。

提前致谢法尼恩德拉

使用 SVG,您正在寻找一个 SVGLoad 事件。它恰好映射到一个名为 load 的属性,但如果您使用的是 addEventListener,则需要查找而不是加载的 SVGLoad。例如

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

SVG的另一个问题是SVGLoad事件不会转到窗口对象,因此您无法像使用html那样执行window.addEventListener。