【发布时间】:2025-12-15 11:35:02
【问题描述】:
我正在尝试将我的 window.document 中的事件传播到此文档中的 iframe。
在window.document 中捕捉事件时,我尝试以下操作:
event.preventDefault()
(@dispatchTo()).dispatchEvent(event)
# @dispatchTo() returns the reference of `document.querySelector('iframe').contentDocument`
但我得到InvalidStateError: Failed to execute 'dispatchEvent' on 'EventTarget': The event is already being dispatched.
我尝试了preventDefault 和stopPropagation,但没有一个可以工作。当我尝试将事件分派到 iframe 文档时,似乎正在分派该事件,但它失败了。
如何在从window.document 捕获事件时将事件传播到我的 iframe?
该事件的 iframe 上确实有另一个 eventListener,但它没有被触发。
我使用 React(它有一个虚拟 DOM,它可能会干扰,也可能不会,只是说)。
我在那里找到了部分解决方案:https://*.com/a/20541207/2391795
现在我可以使用以下代码将事件从文档分派到 iframe:
eventClone = new event.constructor(event.type, event)
(@dispatchTo()).dispatchEvent(eventClone)
但是由于我使用的是 React,所以克隆的事件不等于初始事件,因为 React 有一种事件包装器。所以我丢失了很多属性,比如which 和isTrusted,一旦克隆就变成了false。
有什么方法可以正确克隆一个 React 事件?
【问题讨论】:
-
isTrusted不是 React 的一部分,它是本机浏览器事件属性。您不能以编程方式创建事件并将 isTrusted 设置为true。
标签: javascript events reactjs