【发布时间】:2016-06-17 11:51:27
【问题描述】:
我在这里运行 Firefox 41。
我有一个完整的 svg 文件代码,它是从 wikimedia 的公共资源中随机获取的。 (https://upload.wikimedia.org/wikipedia/commons/c/c6/%2212_World_fly.svg)
然后我尝试了以下两个版本将其推送到 div 元素中,一次使用 div 的 innerHTML,一次尝试使用 div 的 appendChild。
innerHTML 至少可以工作,虽然用 webdeveloper 查看生成的 html 看起来有点可疑
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
也出现了。
使用 appendChild 根本不起作用。
我想使用 appendChild 之类的东西,因为我知道在使用 innerHTML 的解析器时可能会遇到陷阱。
那么,如何将 svg 文件的完整字符串放入 div 中?
<html>
<head>
<script type="application/javascript">
function dgebi(id) {
return document.getElementById(id);
}
// short svg file as string
var svgtext = ... //... here I added the string from https://upload.wikimedia.org/wikipedia/commons/c/c6/%2212_World_fly.svg
var d;
function init() {
d = dgebi('id:testdiv');
//useInnerHTMLToCreateSVG();
useDOMParser();
}
function useInnerHTMLToCreateSVG() {
d.innerHTML = svgtext;
}
function useDOMParser() {
// see https://developer.mozilla.org/de/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document
var parser = new DOMParser();
var doc = parser.parseFromString(svgtext, "image/svg+xml");
// returns a SVGDocument, which also is a Document.
d.appendChild(doc);
}
function createElementSVG() {
var se = document.createElement('SVG');
d.appendChild(se);
console.log(se);
}
</script>
</head>
<body onload="init();">
<div style="width:400px;height:400px;border: 1px #ff0000 solid;" id="id:testdiv"></div>
</body>
</html>
【问题讨论】:
标签: javascript firefox svg innerhtml standards-compliance