Javascript Base64 SVG无法在Chrome中渲染,在Firefox中工作

Javascript Base64 SVG无法在Chrome中渲染,在Firefox中工作,javascript,html,svg,base64,data-uri,Javascript,Html,Svg,Base64,Data Uri,我试图从页面上的svg创建一个图像。但是,我无法在google chrome上使用svgToImage()函数。我将浏览器切换到firefox,生成的所有内容都没有任何问题。Firefox似乎生成了svg的另一种base64表示形式,当这个版本在google chrome中使用时,它可以工作,但该功能仍然无法创建图像 查看一些调试日志,firefox似乎将svg元素从转换为。这就是为什么这段代码在firefox中工作的原因吗?如果是这样的话,是不是因为firefox修复和chrome忽略了一个不

我试图从页面上的svg创建一个图像。但是,我无法在google chrome上使用
svgToImage()
函数。我将浏览器切换到firefox,生成的所有内容都没有任何问题。Firefox似乎生成了svg的另一种base64表示形式,当这个版本在google chrome中使用时,它可以工作,但该功能仍然无法创建图像

查看一些调试日志,firefox似乎将svg元素从
转换为
。这就是为什么这段代码在firefox中工作的原因吗?如果是这样的话,是不是因为firefox修复和chrome忽略了一个不正确的名称空间

我已经发布了我用来测试的代码片段。在chrome上,应该会看到两个后框,然后是一个破碎的图像。在firefox上,应该有三个黑匣子

函数svgToImage(目标){
//在firefox中工作
// https://gist.github.com/Caged/4649511
var svg=document.getElementById(目标);
var xml=new XMLSerializer().serializeToString(svg);
var data='数据:image/svg+xml;base64'+btoa(xml);
var image=新图像();
image.setAttribute('src',data);
document.body.appendChild(图像);
}
//生成另一个svg
svgToImage(“aSVG”)

失败是因为xmlns属性中有逗号而不是点

在HTML中嵌入SVG内联时,不需要xmlns,因此可以删除它

函数svgToImage(目标){
//在firefox中工作
// https://gist.github.com/Caged/4649511
var svg=document.getElementById(目标);
var xml=new XMLSerializer().serializeToString(svg);
var data='数据:image/svg+xml;base64'+btoa(xml);
var image=新图像();
image.setAttribute('src',data);
document.body.appendChild(图像);
}
//生成另一个svg
svgToImage(“aSVG”)


Chrome的版本是45.0.2454.101 m,Firefox的版本是39(20150630154324)。错误在于它接受了错误的名称空间声明?奇怪的是,在一个独立的小提琴中,Chrome bahaves与FF相同。似乎是S.O.代码片段的某些方面导致了失败。啊,事实上,html解析器应该在html中忽略xmlns。serializeToString应该使用正确的名称空间创建输出,因为html解析器已经从上下文中猜到了它。事实上,xmlns属性根本不是必需的,最好不要使用(它是XML的东西,而不是html的东西)。