我有一个在页面生成的SVG,我没有从外部来源带来了进去。 我想这SVG是下载打印。 有没有一种方法(使用客户端的JavaScript)来下载一个DOM节点为文本文件? 我仅限于这个项目Dojo和D3库。
Answer 1:
假设客户端使用HTML5网络浏览器,这可以很容易地使用实现<a>
小号下载属性 。 您需要模拟点击了的MouseEvent这个元素上,如果你想要的行为通过其他方式来调用,但节点没有被附加到文件。 我之前已经回答了这个类似的问题 ,但在这里,设置<a>
小号HREF到SVG的文件位置,除非它是动态创建的-在这种情况下,你会编码描述它来创建一个文本数据URI 。
从它能够获得描述SVG XML文本SVGSVGElement使用节点XMLSerializer的 。
var serializer = new XMLSerializer();
serializer.serializeToString(svg); // xml string for `svg` (your node)
请注意,任何“另存为”对话框将取决于客户端的配置。
// assuming var `svg` for your SVG node
var a = document.createElement('a'), xml, ev;
a.download = 'my_svg.svg'; // file name
xml = (new XMLSerializer()).serializeToString(svg); // convert node to xml string
a.href = 'data:application/octet-stream;base64,' + btoa(xml); // create data uri
// <a> constructed, simulate mouse click on it
ev = document.createEvent("MouseEvents");
ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(ev);
文章来源: Is it possible to have a button start a download of a dom element?