diff --git a/app/client/src/widgets/IframeWidget/component/index.tsx b/app/client/src/widgets/IframeWidget/component/index.tsx index 30eaf7a89f..375ae25db2 100644 --- a/app/client/src/widgets/IframeWidget/component/index.tsx +++ b/app/client/src/widgets/IframeWidget/component/index.tsx @@ -75,16 +75,25 @@ function IframeComponent(props: IframeComponentProps) { widgetId, } = props; + const frameRef = useRef(null); + const isFirstRender = useRef(true); const [message, setMessage] = useState(""); useEffect(() => { + const handler = (event: MessageEvent) => { + const iframeWindow = + frameRef.current?.contentWindow || + frameRef.current?.contentDocument?.defaultView; + // Accept messages only from the current iframe + if (event.source !== iframeWindow) return; + onMessageReceived(event); + }; // add a listener - window.addEventListener("message", onMessageReceived, false); + window.addEventListener("message", handler, false); // clean up - return () => - window.removeEventListener("message", onMessageReceived, false); + return () => window.removeEventListener("message", handler, false); }, []); useEffect(() => { @@ -129,9 +138,9 @@ function IframeComponent(props: IframeComponentProps) { {message ? ( message ) : srcDoc ? ( -