#svg #typescript
#svg #typescript
Вопрос:
Я встраиваю объект SVG в HTML следующим образом:
<object id='mapObject' type="image/svg xml" data="assets/maps/drawing.svg">
</object>
Затем я хочу получить доступ к нему из моих классов typescript (из Ionic 2, но это должно быть безразлично):
let map = document.getElementById("mapObject");
let svgDoc = map.contentDocument; // Get the inner SVG DOM
Это работает в браузере, но typescript жалуется на это:
Свойство typescript ‘contentDocument’ не существует для типа ‘HTMLElement’
И что еще хуже, он не работает на устройстве, потому что компилятор отказывается генерировать для него код.
Мой временный взлом / решение выглядит следующим образом:
let svgDoc = (<HTMLIFrameElement>map).contentDocument; // Get the inner SVG DOM
Это работает в устройстве, потому что HTMLIFrameElement имеет свойство contentDocument , но мне кажется, что typescript должен иметь определенный тип для этого. Однако я не смог его найти.
Кто-нибудь?
Ответ №1:
Вы можете привести / утвердить его в HTMLObjectElement, который имеет свойство contentDocument:
let map = document.getElementById("mapObject") as HTMLObjectElement;
let svgDoc = map.contentDocument; // should be fine
Комментарии:
1. Вау, это было быстро. Я пропустил очевидный, HTMLObjectElement, при поиске в семействе SVGElement. Также спасибо за помощь, позволяющую избежать приведения в первую очередь. Так гораздо элегантнее 🙂