diff --git a/keepassxc-browser/content/autocomplete.js b/keepassxc-browser/content/autocomplete.js index 38cea6c..3402109 100644 --- a/keepassxc-browser/content/autocomplete.js +++ b/keepassxc-browser/content/autocomplete.js @@ -283,12 +283,14 @@ class Autocomplete { this.container.classList.remove('kpxcAutocomplete-container-on-top'); } + const scrollTop = kpxcUI.getScrollTop(); + const scrollLeft = kpxcUI.getScrollLeft(); if (kpxcUI.bodyStyle.position.toLowerCase() === 'relative') { - this.container.style.top = Pixels(rect.top - kpxcUI.bodyRect.top + document.scrollingElement.scrollTop + this.input.offsetHeight - menuOffset); - this.container.style.left = Pixels(rect.left - kpxcUI.bodyRect.left + document.scrollingElement.scrollLeft); + this.container.style.top = Pixels(rect.top - kpxcUI.bodyRect.top + scrollTop + this.input.offsetHeight - menuOffset); + this.container.style.left = Pixels(rect.left - kpxcUI.bodyRect.left + scrollLeft); } else { - this.container.style.top = Pixels(rect.top + document.scrollingElement.scrollTop + this.input.offsetHeight - menuOffset); - this.container.style.left = Pixels(rect.left + document.scrollingElement.scrollLeft); + this.container.style.top = Pixels(rect.top + scrollTop + this.input.offsetHeight - menuOffset); + this.container.style.left = Pixels(rect.left + scrollLeft); } } } diff --git a/keepassxc-browser/content/custom-fields-banner.js b/keepassxc-browser/content/custom-fields-banner.js index fc47544..b06ad8b 100644 --- a/keepassxc-browser/content/custom-fields-banner.js +++ b/keepassxc-browser/content/custom-fields-banner.js @@ -621,8 +621,8 @@ kpxcCustomLoginFieldsBanner.setSelectionPosition = function(field) { const rect = field.originalElement.getBoundingClientRect(); const left = kpxcUI.getRelativeLeftPosition(rect); const top = kpxcUI.getRelativeTopPosition(rect); - const scrollTop = document.scrollingElement ? document.scrollingElement.scrollTop : 0; - const scrollLeft = document.scrollingElement ? document.scrollingElement.scrollLeft : 0; + const scrollTop = kpxcUI.getScrollTop(); + const scrollLeft = kpxcUI.getScrollLeft(); field.style.top = Pixels(top + scrollTop); field.style.left = Pixels(left + scrollLeft); diff --git a/keepassxc-browser/content/ui.js b/keepassxc-browser/content/ui.js index c48bb89..382917a 100644 --- a/keepassxc-browser/content/ui.js +++ b/keepassxc-browser/content/ui.js @@ -143,14 +143,22 @@ kpxcUI.setIconPosition = function(icon, field, rtl = false, segmented = false) { top = iconOffset[1]; } - const scrollTop = document.scrollingElement ? document.scrollingElement.scrollTop : 0; - const scrollLeft = document.scrollingElement ? document.scrollingElement.scrollLeft : 0; + const scrollTop = kpxcUI.getScrollTop(); + const scrollLeft = kpxcUI.getScrollLeft(); icon.style.top = Pixels(top + scrollTop + offset + 1); icon.style.left = rtl ? Pixels((left + scrollLeft) + offset) : Pixels(left + scrollLeft + field.offsetWidth - size - offset); }; +kpxcUI.getScrollTop = function() { + return document.defaultView?.scrollY ?? document.scrollingElement?.scrollTop ?? 0; +}; + +kpxcUI.getScrollLeft = function() { + return document.defaultView?.scrollX ?? document.scrollingElement?.scrollLeft ?? 0; +}; + kpxcUI.getRelativeLeftPosition = function(rect) { return kpxcUI.bodyStyle.position.toLowerCase() === 'relative' ? rect.left - kpxcUI.bodyRect.left : rect.left; }; diff --git a/keepassxc-browser/manifest.json b/keepassxc-browser/manifest.json index 81e679d..5270d35 100755 --- a/keepassxc-browser/manifest.json +++ b/keepassxc-browser/manifest.json @@ -158,7 +158,7 @@ "applications": { "gecko": { "id": "keepassxc-browser@keepassxc.org", - "strict_min_version": "67.0" + "strict_min_version": "74.0" } }, "default_locale": "en"