From 1c7828eb86707ffa28328dea53a413d2d2861879 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sat, 16 Sep 2023 10:49:31 +0300 Subject: [PATCH] Dispatch more events on fill --- .../content/keepassxc-browser.js | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/keepassxc-browser/content/keepassxc-browser.js b/keepassxc-browser/content/keepassxc-browser.js index 743940e..f22bda6 100755 --- a/keepassxc-browser/content/keepassxc-browser.js +++ b/keepassxc-browser/content/keepassxc-browser.js @@ -672,12 +672,23 @@ kpxc.setValueWithChange = function(field, value, forced = false) { return; } + const dispatchLegacyEvent = function(elem, eventName) { + const legacyEvent = elem.ownerDocument.createEvent('Event'); + legacyEvent.initEvent(eventName, true, false); + elem.dispatchEvent(legacyEvent); + }; + + field.focus(); + field.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: false })); + field.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true, cancelable: false })); + field.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, cancelable: false })); + field.dispatchEvent(new Event('input', { bubbles: true, cancelable: false })); + field.dispatchEvent(new Event('change', { bubbles: true, cancelable: false })); field.value = value; - field.dispatchEvent(new Event('input', { bubbles: true })); - field.dispatchEvent(new Event('change', { bubbles: true })); - field.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: false, key: '', char: '' })); - field.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true, cancelable: false, key: '', char: '' })); - field.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true, cancelable: false, key: '', char: '' })); + + // Some pages will not accept the value change without dispatching events directly to the document + dispatchLegacyEvent(field, 'input'); + dispatchLegacyEvent(field, 'change'); }; // Returns true if site is ignored