如何在HTML中访问“embed”标记的内容

时间:2011-12-13 21:13:46

标签: javascript html svg

我有一个SVG文件,我不想将其粘贴到HTML文件中,因为它会变得混乱。 因此,在咨询了w3schools之后,“embed”标签似乎是将外部SVG文件包含在HTML中最安全的方法。

<embed src="path_to_svg" type="image/svg+xml" id='svgsource' />

但是,我需要通过主html文件中的javascript通过DOM访问svg元素。不幸的是

document.getElementById('my_svg_id')

,也不

document.getElementById('svgsource').contentDocument

适用于任何浏览器。使用“object”标签也不起作用。

5 个答案:

答案 0 :(得分:9)

完成关于转弯!

原来可以,请看这个链接:http://xn--dahlstrm-t4a.net/svg/html/get-embedded-svg-document-script.html

(另外,在Erik Dahlström's个其他答案中进行投票,给我一些积分,让我劫持他的答案!)

答案 1 :(得分:9)

使用.getSVGDocument()。这似乎适用于<embed><object><iframe>

document.getElementById('svgsource').getSVGDocument()

对于<object><iframe>,您还可以使用.contentDocument

document.getElementById('svgsource').contentDocument

对于IE7或IE8,我相信你运气不好。

答案 2 :(得分:0)

您是否尝试使用&lt; object&gt;元素而不是? (数据属性而不是src)

答案 3 :(得分:0)

我相信在IE9中你可以使用<iframe>元素加载SVG,在这种情况下你可以访问contentDocument属性,但是对于以前版本的IE,你可能会运气不好。 (其他浏览器应该允许您将contentDocument<embed><object>一起使用。)

答案 4 :(得分:0)

简短回答:您可以尝试内联引用的SVG文件内容。对于<object><iframe>元素,请使用:

e.parentElement.replaceChild(e.contentDocument.documentElement.cloneNode(true), e);

...其中e是引用元素。如果您绝对需要<embed>元素,请将上述代码中的.contentDocument更改为.getSVGDocument()(括号是必需的)。但请注意,.getSVGDocument() is now deprecated因此不推荐,但无论如何它也已recommended to use <object> or <iframe> instead of <embed>

如需更完整的答案,请参阅my other SO answer on the subject