Как получить доступ к содержимому тега "embed" в HTML - PullRequest
14 голосов
/ 14 декабря 2011

У меня есть файл SVG, и я не хочу вставлять его в файл HTML, потому что, ну, он становится грязным.Поэтому, посоветовавшись с w3schools, тег «embed» показался наиболее безопасным способом включения внешнего файла SVG в HTML.

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

Однако мне нужно получить доступ к элементам svg через DOM через javascript в основном html-файле.,К сожалению, ни

document.getElementById('my_svg_id')

, ни

document.getElementById('svgsource').contentDocument

не работают ни в одном браузере.Использование тега «object» тоже не помогает.

Ответы [ 5 ]

9 голосов
/ 14 декабря 2011

Используйте .getSVGDocument(). Кажется, это работает для <embed>, <object> и <iframe>:

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

Для <object> или <iframe> вы также можете использовать .contentDocument:

document.getElementById('svgsource').contentDocument

Для IE7 или IE8, я думаю, вам не повезло.

9 голосов
/ 14 декабря 2011

Завершите про ход!

Оказывается, вы можете посмотреть эту ссылку: http://xn - dahlstrm-t4a.net/svg/html/get-embedded-svg-document-script.html

(Кроме того, поднимите и проголосуйте за некоторые из других ответов Эрика Дальстрёма, чтобы дать ему несколько баллов за то, что я угнал его ответ!)

0 голосов
/ 07 марта 2016

Краткий ответ: Вы можете попробовать встроить содержимое SVG-файла, на который ссылаются.Для элементов <object> и <iframe> используйте:

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

... где e - ссылочный элемент.Если вам абсолютно необходим элемент <embed>, измените .contentDocument в приведенном выше коде на .getSVGDocument() (необходимо указать скобки).Обратите внимание, однако, что .getSVGDocument() теперь устарела и поэтому не рекомендуется, но также рекомендуется использовать <object> или <iframe> вместо <embed> в любом случае.

Более полный ответ см. Мой другой SO-ответ по теме .

.
0 голосов
/ 14 декабря 2011

Я верю, что в IE9 вы можете использовать элемент <iframe> для загрузки SVG, в этом случае вы можете получить доступ к свойству contentDocument, но с предыдущими версиями IE вам может не повезти.(Другие браузеры должны позволять вам использовать contentDocument с <embed> и <object>.)

0 голосов
/ 14 декабря 2011

Вы пробовали использовать элемент ? (атрибут данных вместо src)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...