【发布时间】:2015-07-28 05:17:40
【问题描述】:
我在 safari 中尝试通过代码将 svg 转换为 base64 url 时遇到此错误:
$svgCopy = $('svg').clone()
html = $('<div>').append($svgCopy).html()
imgSrc = 'data:image/svg+xml;base64,' + btoa(html)
imgEl.src = imgSrc
问题是当你用 NS (setAttributeNS) 设置属性时,safari 设置了 NS\d+ 命名空间并且没有在 svg 中设置 xmlns:NS\d+ 属性,所以看起来像
<use NS1:href="#source" />
当你在 Chrome 中复制这样的 svg - 你没有这样的问题,因为这个 svg 元素看起来像这样:
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#source" />
结果(在 svg 副本上)我们得到了无效文件。
UPD:@Robert 和 setAttributeNS 一切正常:
el.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#source')
如果没有正确调用,它将无法在 Chrome 中运行。
【问题讨论】:
标签: svg safari namespaces xml-namespaces setattribute