Событие HTMLObjectElement onclick не срабатывает

Я использую HTMLObjectElement для отображения графики SVG, как рекомендовано здесь: https://www.sitepoint.com/add-svg-to-web-page/

Проблема в том, что в javaScript я сделал что-то вроде:

const objEl = document.createElement( 'object' );
objEl.type = 'image/svg+xml';
objEl.data = 'myGraphic.svg';
objEl.onclick = () => {
  console.log( 'I was clicked' );
}

и событие onclick никогда не запускается, когда я нажимаю на него мышью.

Если я использую img, а не объект, событие щелчка срабатывает. Почему событие клика не работает для объектов? Как я могу получить события кликов?

Обратите внимание: я также прикрепил события objEl.onmouseover и objEl.onmouseout, и они прекрасно работают. У меня не работают только события кликов.


person Marek Krzeminski    schedule 08.03.2018    source источник
comment
Вы пробовали использовать addEventListener()?   -  person Fashim    schedule 08.03.2018
comment
Элемент <object> связан с теми же правилами, что и элемент <iframe>, и действительно, он не позволит родительскому документу узнать, что происходит внутри его contentDocument, и не будет всплывать события указателя, которые он получил. Поскольку вы отображаете документ svg, вы можете добавить в него скрипт, например onclick = e => parent.postMessage({x:e.clientX, y:e.clientY}, '*');. jsfiddle.net/j8y4h28L   -  person Kaiido    schedule 08.03.2018
comment
Это не хорошо. Скажем, у меня есть 10 svg, и я хочу знать, на какой svg я нажимаю. Похоже, мне нужно обновить все 10 svg, чтобы внутри них был какой-то скрипт, чтобы сообщить родителю, что он был нажат. Затем родителю также придется слушать эти сообщения... Я собираюсь посмотреть, есть ли какой-либо другой способ использования svg, который не требует от меня редактирования svg, чтобы получать уведомления при нажатии на них. У меня есть способ редактировать многие SVG таким образом.   -  person Marek Krzeminski    schedule 08.03.2018
comment
@MarekKnows.com Вы также можете попробовать, как было предложено в обмане: получить доступ ко всем внутренним документам из вашего основного документа и прикрепить оттуда события кликов. HTMLObjectElement даже предлагает метод getSVGDocument, но этот метод привязан к той же политике происхождения.   -  person Kaiido    schedule 09.03.2018