生成不带foreignObject标签的svg
generate svg without foreignObject tag
我使用dom-to-image.js插件。问题是,它会生成一个污染画布的<foreignObject>
标记。下面是生成svg的部分。
function makeSvgDataUri(node, width, height) {
return Promise.resolve(node)
.then(function (node) {
node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
return new XMLSerializer().serializeToString(node);
})
.then(util.escapeXhtml)
.then(function (xhtml) {
return '<foreignObject x="0" y="0" width="100%" height="100%">' + xhtml + '</foreignObject>';
})
.then(function (xhtml) {
return '<svg xmlns="http://www.w3.org/2000/svg" width="' + width + '" height="' + height + '">' +
xhtml + '</svg>';
})
.then(function (svg) {
return 'data:image/svg+xml;charset=utf-8,' + svg;
});
}
如果我只是注释掉<foreignObject>
标记部分,那么图像不显示。什么是正确的方式来生成这个svg没有<foreignObject>
这是一个已知的安全问题,从safari版本9开始引入。
由于绘制foreignObject意味着要使用XMLParser,因此在这个领域恶意代码的风险是巨大的。Safari可能知道他们在这里缺少一些东西,所以更喜欢污染画布。这同样适用于IE下边缘的所有svg图像。
由于这是一个安全问题,所以没有解决方法,除非使用其他不做此类黑客行为的库。即使在支持它的浏览器上,这种技术也有很多安全限制,所以它不会有任何好处。
在画布上绘制html的唯一可靠方法是使用单独的画布方法。
像html2canvas这样的库可以做到这一点,并且不会污染你的画布。
相关文章:
- 如何在javascript中使用svg文本标签
- Svg标签在IE8中不起作用
- 可见性不适用于svg-g标签
- svg矩形不同边上的标签
- svg 多边形标签的宽度
- 咏叹调网格单元格标签在 SVG 矩形内始终为空白
- 将带有图像标签的 Svg 转换为 PNG
- 如何在我们的html页面中添加来自jquery的svg标签
- 如何将img放在svg标签的前面
- 如何在svg标签内的图像标签上放置边框和超链接
- 生成不带foreignObject标签的svg
- 没有事件在谷歌Chrome从SVG元素引用的使用标签
- 从html img标签- css中更改一个svg元素的颜色
- 使用img标签加载不受信任的SVG时的XSS
- 如何从嵌入标签中获取svg元素
- 将图像标签拖动到svg的组标签中
- 使用svg文件下的img标签
- 地图将不显示在屏幕上,svg标签被插入
- 如何从DIV标签中有多个SVG的页面中选择SVG代码
- 使用 JavaScript 移动 SVG 'g' 标签