From 9ad4e1048acf0b210f992c05b02e95de63ca27eb Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Tue, 4 Feb 2025 12:00:42 +0000 Subject: [PATCH] Detect iframe clicks via loss of focus --- packages/bbui/src/Actions/click_outside.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/bbui/src/Actions/click_outside.ts b/packages/bbui/src/Actions/click_outside.ts index 248a03039e..0c2eb036bc 100644 --- a/packages/bbui/src/Actions/click_outside.ts +++ b/packages/bbui/src/Actions/click_outside.ts @@ -34,7 +34,7 @@ let candidateTarget: HTMLElement | undefined // Processes a "click outside" event and invokes callbacks if our source element // is valid const handleClick = (e: MouseEvent) => { - const target = e.target as HTMLElement + const target = (e.target || e.relatedTarget) as HTMLElement // Ignore click if this is an ignored class if (target.closest('[data-ignore-click-outside="true"]')) { @@ -91,9 +91,19 @@ const handleMouseDown = (e: MouseEvent) => { document.addEventListener("click", handleMouseUp, true) } +// Handle iframe clicks by detecting a loss of focus on the main window +const handleBlur = () => { + if (document.activeElement?.tagName === "IFRAME") { + handleClick( + new MouseEvent("click", { relatedTarget: document.activeElement }) + ) + } +} + // Global singleton listeners for our events document.addEventListener("mousedown", handleMouseDown) document.addEventListener("contextmenu", handleClick) +window.addEventListener("blur", handleBlur) /** * Adds or updates a click handler