IFrameElement EventListener не вызывается

Я добавил EventListener в IFrameElement, но он никогда не вызывается.

Определение слушателя:

  EventListener eventListener = (e) {
    print("Lisenter clicked.");
  };

Определение IFrameElement:

  var type = 'click';

  IFrameElement element = IFrameElement()
    ..width = (MediaQuery.of(context).size.width - 400).toString()
    ..height = MediaQuery.of(context).size.height.toString()
    ..srcdoc = value
    ..addEventListener(type, eventListener)
    ..style.border = 'none';

  ui.platformViewRegistry.registerViewFactory(
      createdViewId,
          (int viewId) => element);

Определение события отправки:

marker.addListener('click', function() {dispatchEvent(new Event("click"));console.log("woot");});

«woot» находится в консоли при нажатии маркера, но я никогда не вижу «Нажатие прослушивателя». Что я делаю неправильно?

введите здесь описание изображения


person dazza5000    schedule 20.08.2019    source источник
comment
По-видимому, событие щелчка мыши не работает для междоменного iframe. Здесь есть решение в виде Gist. gist.github.com/jaydson/1780598 Вы можете попробовать это. В моем небольшом тесте событие mouseOver работало правильно. Но я не мог воссоздать событие щелчка. В stackoverflow есть и другие ссылки, посвященные этой проблеме. stackoverflow.com/questions/6452502/ stackoverflow.com/questions/16792953/   -  person Abhilash Chandran    schedule 20.08.2019
comment
Следующий способ добавления прослушивателей событий может помочь с ясностью прослушивателей на вашем элементе element.onMouseLeave.listen((evt) { mouseOver = false; print('Mosue is leaving iframe'); });   -  person Abhilash Chandran    schedule 20.08.2019
comment
Попробую это. Спасибо.   -  person dazza5000    schedule 20.08.2019


Ответы (1)


Я закончил со следующим:

    "marker.addListener('click', function() {dispatchEvent(new MouseEvent('click', {view: window, bubbles: true, cancelable: true }));"
        "var o = Object.create(null);"
        "o.id = \"${property.id}\";"
        ""
        "console.log(o);"
        "window.parent.postMessage(o);"
        ""
        "});\n";

Затем я прикрепляю прослушиватель к окну:

window.onMessage.listen((onData) {
  // do things
  if (messageEvent.data["id"] == property.id) { }
})
person dazza5000    schedule 22.01.2020