2012-05-10 16 views
2

使用javascript插入到文档中的SVG看起来像乱码,因为它们内部具有冲突ID的符号。举例来说,这两种不同的SVG文件使用javascript插入具有冲突ID的SVG

http://filebin.ca/1LMtJr5zc2x/svg1.svg

http://filebin.ca/1LN9F5ZPIbH/svg2.svg

当插入的JavaScript文件*,其中一人看起来错误(对我来说变成X的A的)。如果你打开一个文本编辑器SVG文件,你会看到他们都有这样的

<symbol overflow="visible" id="glyph0-0"> 

所以我猜浏览器中的线看到第二SVG参考“glyph0-0”,并使用所定义的一个由第一张 svg。有没有什么方法可以告诉浏览器“只有在那里才能定义的符号”?就像限制符号的范围一样。

< img>指向这两个文件的标签没有这个问题。然而,我没有使用这个解决方案,因为那时服务器将不得不保留一堆文件并跟踪它们何时可以被扔掉。使用我目前的解决方案,浏览器在内存中具有SVG,当窗口关闭时它们不见了。

*使用XMLHttpRequest,我获取一个动态生成的SVG文件,克隆根目录并将其附加到文档中。

+0

就我所知,Firefox是唯一支持SVG图形的浏览器。这是正确的,你有没有好吗? – Teak

+2

不,Firefox真的不是唯一支持SVG的浏览器。 http://caniuse.com/#search=svg – dwerner

+0

您可以使用''标记来表示每个SVG文档的内嵌'data' URI吗? – Phrogz

回答

2

ID始终是文档的全局ID,根据HTML规范,非唯一ID将被视为无效。如果您需要两个符号才能拥有相同的ID,请尝试使用“class”而不是“id”。您也可以对SVG字符串进行一些正则表达式预处理来调整ID,以便它们是唯一的。

+0

我明白了。我可能会使用MathML而不是latex-> pdf-> svg,看起来不那么麻烦。 OP; e; eternauta3k,OP; – eternauta3k

+2

@ eternauta3k,OP;确实。我会使用类似PHP/SimpleXML的东西遍历其中一个文档,并将每个“id”更改为具有唯一前缀,比如MD5散列。然后这两个文档可以合并,不存在唯一性冲突的可能性。 – halfer