From 505e0235b91052e7b9e4e542d8cd5639cba03de6 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 30 Jun 2022 21:52:47 +0200 Subject: Fix interoperability issue regarding Event properties (#36386) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix interoperability issue regarding Event properties - make possible to re-set read-only event properties - use hydrateObj() to set delegateTarget property Fixes #36207 Co-authored-by: GeoSot Co-authored-by: Julien Déramond --- js/src/dom/event-handler.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'js/src') diff --git a/js/src/dom/event-handler.js b/js/src/dom/event-handler.js index 87f936b41..0aa628c66 100644 --- a/js/src/dom/event-handler.js +++ b/js/src/dom/event-handler.js @@ -89,7 +89,7 @@ function getElementEvents(element) { function bootstrapHandler(element, fn) { return function handler(event) { - event.delegateTarget = element + hydrateObj(event, { delegateTarget: element }) if (handler.oneOff) { EventHandler.off(element, event.type, fn) @@ -109,7 +109,7 @@ function bootstrapDelegationHandler(element, selector, fn) { continue } - event.delegateTarget = target + hydrateObj(event, { delegateTarget: target }) if (handler.oneOff) { EventHandler.off(element, event.type, selector, fn) @@ -302,11 +302,16 @@ const EventHandler = { function hydrateObj(obj, meta) { for (const [key, value] of Object.entries(meta || {})) { - Object.defineProperty(obj, key, { - get() { - return value - } - }) + try { + obj[key] = value + } catch { + Object.defineProperty(obj, key, { + configurable: true, + get() { + return value + } + }) + } } return obj -- cgit v1.2.3