我对此进行了修改,并将此评论移至顶部。
与 Stackoverflow 一致,这可能是一些没有人可以修复的底层问题中的错误。但我会考虑您建议的最佳方法,保留在我们的应用程序框架内,以消除虚假属性作为解决方案。不然就不公平了。
我有一个奇怪的问题要解决,这令人费解。首先,除了在 Chrome 或 Firefox 上不会发生这种行为之外,还不清楚它是 IE。我们使用 Anychart 和 D3 中的图表库在页面上生成 SVG。这一切都很棒。该应用程序是一个打印应用程序,将解析后的 css + html 提取到单独的 div 中,并通过 REST 将其发送到格式化服务。
问题仅存在于 IE 中,并且仅存在于 Anychart 图表中。如果您检查此页面:
http://www.xportability.com/XEPOnline/FOTestSuite.html
并查看图像示例#4,您将看到一个图表。使用 IE 和 DOM 资源管理器,您将看到:
一切看起来都很好。事实上,如果那是“真实的”,一切都很好。如果您无论如何都使用 javascript 来提取该 SVG(最简单的方法是在 Explorer DOM 中复制 HTML),您将看到该元素的 HTML 实际上是:
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" xmlns="http://www.w3.org/2000/svg">
即使document.getElementById("anychart").outerHTML
在控制台中使用也会以这种方式返回此元素。
注意命名空间的双重声明。好吧,这就是问题所在,因为那是一个错误。
- 它不会发生在 D3 图表上,也不会发生在静态图表上。只有这张图表。
- 它不会发生在 Chrome 和 Firefox 中。
- 最奇怪的是,它甚至没有在 IE 自己的 DOM 浏览器中以这种方式显示。
我在这里错过了什么吗?我们正在做的其他事情是让 IE 这样做吗?
注意:我不是在寻找诸如将正则表达式应用于序列化字符串之类的答案。我们可以这样做(事实上我们已经这样做了)来关闭空的(非关闭的)HTML 标记以生成有效的 XML。
注意 2:我并不否认这可能存在于使用的底层 Anychart JS 库中,或者是 Internet Explorer 中的错误。它仅使用 Anychart 库出现。已联系他们发表评论。但是,IE 在 DOM 资源管理器中仅显示一个命名空间,然后在导出时显示两个命名空间这一事实怀疑这可能是一个 IE 问题。他们也通过他们的支持得到了联系。
所以,我知道这个问题可能没有“答案”......它可能是另一个库或浏览器中的错误。
因此,这个演示目前仅适用于 Chrome 和 Firefox ......直到我们解决这个问题或以其他方式解决。