diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/fg/js/frame-offset-forwarder.js | 23 | 
1 files changed, 21 insertions, 2 deletions
| diff --git a/ext/fg/js/frame-offset-forwarder.js b/ext/fg/js/frame-offset-forwarder.js index c658c55a..ac6e617d 100644 --- a/ext/fg/js/frame-offset-forwarder.js +++ b/ext/fg/js/frame-offset-forwarder.js @@ -79,9 +79,28 @@ class FrameOffsetForwarder {              sourceFrame = frame;              break;          } +          if (sourceFrame === null) { -            this._forwardFrameOffsetOrigin(null, uniqueId); -            return; +            const getShadowRootElements = (documentOrElement) => { +                const elements = Array.from(documentOrElement.querySelectorAll('*')) +                    .filter((el) => !!el.shadowRoot); +                const childElements = elements +                    .map((el) => el.shadowRoot) +                    .map(getShadowRootElements); +                elements.push(childElements.flat()); + +                return elements.flat(); +            }; + +            sourceFrame = getShadowRootElements(document) +                .map((el) => Array.from(el.shadowRoot.querySelectorAll('frame, iframe:not(.yomichan-float)'))) +                .flat() +                .find((el) => el.contentWindow === e.source); + +            if (!sourceFrame) { +                this._forwardFrameOffsetOrigin(null, uniqueId); +                return; +            }          }          const [forwardedX, forwardedY] = offset; |