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

IT技术 javascript html svg
2021-02-25 10:15:16

我有一个 SVG 文件,我不想将它粘贴到 HTML 文件中,因为它会变得很乱。因此,在咨询了 w3schools 之后,“嵌入”标签似乎是将外部 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个回答

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

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

对于<object>或者<iframe>你也可以使用.contentDocument

document.getElementById('svgsource').contentDocument

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

如果安装了 Adob​​e SVG 插件,我认为 getSVGDocument 在 IE7/8 中工作,仅在嵌入元素上。但我不能推荐这种配置,升级到现代浏览器要好得多。
2021-05-06 10:15:16
.getSVGDocument()现在已经过时
2021-05-18 10:15:16

完成约转!

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

(另外,去投票Erik Dahlström 的其他一些答案,给他一些分数,让我劫持他的答案!)

或者,您可以使用 iframe - 您可以使用通常的方式访问它。
2021-04-22 10:15:16
我相信是的,是的。不过,正如我所说,您可以通过 ajax 将整个 svg 加载到 div 中,以便在需要时将其分开。
2021-05-01 10:15:16
所以你是说我应该在 html 中包含整个 SVG,否则我将无法进一步访问它,对吗?因为据我所知,包含 SVG 的选项是使用 <embed> 、 <object> 或 <iframe>
2021-05-16 10:15:16

您是否尝试过使用 <object> 元素?(数据属性而不是 src)

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

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

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

...e引用元素在哪里如果您绝对需要该<embed>元素.contentDocument,则将上述代码更改.getSVGDocument()(需要括号)。但是请注意,.getSVGDocument()现在已弃用,因此不推荐使用,但也已推荐使用<object><iframe>代替<embed>任何方式。

有关更完整的答案,请参阅我关于该主题的其他 SO 答案