From a437528b71b0e4fe62d28fbb96fa42ea9bc47bc8 Mon Sep 17 00:00:00 2001 From: Khokan Sardar Date: Thu, 27 Aug 2026 18:31:41 +0530 Subject: [PATCH 1/2] Embeds: Use the click handler's own event parameter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `linkClickHandler()` checked modifier keys against the global `event` rather than its `e` parameter. Any script in the embed template that declares a top-level `var event` shadows `window.event`, so the check reads `undefined` and passes — a Cmd/Ctrl + click on a link inside an embed then navigates the top window instead of opening a new tab. --- src/js/_enqueues/lib/embed-template.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/_enqueues/lib/embed-template.js b/src/js/_enqueues/lib/embed-template.js index ae58e4e967d7a..78941826954de 100644 --- a/src/js/_enqueues/lib/embed-template.js +++ b/src/js/_enqueues/lib/embed-template.js @@ -165,7 +165,7 @@ } // Only catch clicks from the primary mouse button, without any modifiers. - if ( event.altKey || event.ctrlKey || event.metaKey || event.shiftKey ) { + if ( e.altKey || e.ctrlKey || e.metaKey || e.shiftKey ) { return; } From fab4bfda4c837a9f301751b22f7a9bc0bbfd7704 Mon Sep 17 00:00:00 2001 From: Khokan Sardar Date: Fri, 28 Aug 2026 09:42:55 +0530 Subject: [PATCH 2/2] Embeds: Name the event handler parameters `event`. Rename the `e` parameter to `event` in every handler in `embed-template.js`, rather than reading the modifier keys off `e` in `linkClickHandler()`. The parameter now shadows `window.event`, so the modifier key check is no longer affected by a top-level `var event` in the embed template, and the name matches the existing `onMessage( event )` handler. --- src/js/_enqueues/lib/embed-template.js | 46 ++++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/js/_enqueues/lib/embed-template.js b/src/js/_enqueues/lib/embed-template.js index 78941826954de..5d6136461f5fa 100644 --- a/src/js/_enqueues/lib/embed-template.js +++ b/src/js/_enqueues/lib/embed-template.js @@ -41,8 +41,8 @@ if ( share_input ) { for ( i = 0; i < share_input.length; i++ ) { - share_input[ i ].addEventListener( 'click', function ( e ) { - e.target.select(); + share_input[ i ].addEventListener( 'click', function ( event ) { + event.target.select(); } ); } } @@ -70,24 +70,24 @@ } ); } - function shareClickHandler( e ) { + function shareClickHandler( event ) { var currentTab = document.querySelector( '.wp-embed-share-tab-button [aria-selected="true"]' ); currentTab.setAttribute( 'aria-selected', 'false' ); document.querySelector( '#' + currentTab.getAttribute( 'aria-controls' ) ).setAttribute( 'aria-hidden', 'true' ); - e.target.setAttribute( 'aria-selected', 'true' ); - document.querySelector( '#' + e.target.getAttribute( 'aria-controls' ) ).setAttribute( 'aria-hidden', 'false' ); + event.target.setAttribute( 'aria-selected', 'true' ); + document.querySelector( '#' + event.target.getAttribute( 'aria-controls' ) ).setAttribute( 'aria-hidden', 'false' ); } - function shareKeyHandler( e ) { - var target = e.target, + function shareKeyHandler( event ) { + var target = event.target, previousSibling = target.parentElement.previousElementSibling, nextSibling = target.parentElement.nextElementSibling, newTab, newTabChild; - if ( 37 === e.keyCode ) { + if ( 37 === event.keyCode ) { newTab = previousSibling; - } else if ( 39 === e.keyCode ) { + } else if ( 39 === event.keyCode ) { newTab = nextSibling; } else { return false; @@ -119,24 +119,24 @@ } } - document.addEventListener( 'keydown', function ( e ) { - if ( 27 === e.keyCode && -1 === share_dialog.className.indexOf( 'hidden' ) ) { + document.addEventListener( 'keydown', function ( event ) { + if ( 27 === event.keyCode && -1 === share_dialog.className.indexOf( 'hidden' ) ) { closeSharingDialog(); - } else if ( 9 === e.keyCode ) { - constrainTabbing( e ); + } else if ( 9 === event.keyCode ) { + constrainTabbing( event ); } }, false ); - function constrainTabbing( e ) { + function constrainTabbing( event ) { // Need to re-get the selected tab each time. var firstFocusable = document.querySelector( '.wp-embed-share-tab-button [aria-selected="true"]' ); - if ( share_dialog_close === e.target && ! e.shiftKey ) { + if ( share_dialog_close === event.target && ! event.shiftKey ) { firstFocusable.focus(); - e.preventDefault(); - } else if ( firstFocusable === e.target && e.shiftKey ) { + event.preventDefault(); + } else if ( firstFocusable === event.target && event.shiftKey ) { share_dialog_close.focus(); - e.preventDefault(); + event.preventDefault(); } } @@ -154,9 +154,11 @@ /** * Detect clicks to external (_top) links. + * + * @param {MouseEvent} event */ - function linkClickHandler( e ) { - var target = e.target, + function linkClickHandler( event ) { + var target = event.target, href; if ( target.hasAttribute( 'href' ) ) { href = target.getAttribute( 'href' ); @@ -165,14 +167,14 @@ } // Only catch clicks from the primary mouse button, without any modifiers. - if ( e.altKey || e.ctrlKey || e.metaKey || e.shiftKey ) { + if ( event.altKey || event.ctrlKey || event.metaKey || event.shiftKey ) { return; } // Send link target to the parent (embedding) site. if ( href ) { sendEmbedMessage( 'link', href ); - e.preventDefault(); + event.preventDefault(); } }