diff options
| -rw-r--r-- | ext/fg/js/frontend-initialize.js | 15 | ||||
| -rw-r--r-- | ext/fg/js/popup-proxy.js | 7 | 
2 files changed, 17 insertions, 5 deletions
| diff --git a/ext/fg/js/frontend-initialize.js b/ext/fg/js/frontend-initialize.js index 83c0e606..2e63c29f 100644 --- a/ext/fg/js/frontend-initialize.js +++ b/ext/fg/js/frontend-initialize.js @@ -24,7 +24,7 @@   * apiOptionsGet   */ -async function createIframePopupProxy(url, frameOffsetForwarder) { +async function createIframePopupProxy(url, frameOffsetForwarder, setDisabled) {      const rootPopupInformationPromise = yomichan.getTemporaryListenerResult(          chrome.runtime.onMessage,          ({action, params}, {resolve}) => { @@ -38,7 +38,7 @@ async function createIframePopupProxy(url, frameOffsetForwarder) {      const getFrameOffset = frameOffsetForwarder.getOffset.bind(frameOffsetForwarder); -    const popup = new PopupProxy(popupId, 0, null, frameId, url, getFrameOffset); +    const popup = new PopupProxy(popupId, 0, null, frameId, url, getFrameOffset, setDisabled);      await popup.prepare();      return popup; @@ -78,6 +78,13 @@ async function main() {      let frontendPreparePromise = null;      let frameOffsetForwarder = null; +    let iframePopupsInRootFrameAvailable = true; + +    const disableIframePopupsInRootFrame = () => { +        iframePopupsInRootFrameAvailable = false; +        applyOptions(); +    }; +      const applyOptions = async () => {          const optionsContext = {depth: isSearchPage ? 0 : depth, url};          const options = await apiOptionsGet(optionsContext); @@ -88,8 +95,8 @@ async function main() {          }          let popup; -        if (isIframe && options.general.showIframePopupsInRootFrame && !document.fullscreen) { -            popup = popups.iframe || await createIframePopupProxy(url, frameOffsetForwarder); +        if (isIframe && options.general.showIframePopupsInRootFrame && !document.fullscreen && iframePopupsInRootFrameAvailable) { +            popup = popups.iframe || await createIframePopupProxy(url, frameOffsetForwarder, disableIframePopupsInRootFrame);              popups.iframe = popup;          } else if (proxy) {              popup = popups.proxy || await createPopupProxy(depth, id, parentFrameId, url); diff --git a/ext/fg/js/popup-proxy.js b/ext/fg/js/popup-proxy.js index 82ad9a8f..3af83db2 100644 --- a/ext/fg/js/popup-proxy.js +++ b/ext/fg/js/popup-proxy.js @@ -20,7 +20,7 @@   */  class PopupProxy { -    constructor(id, depth, parentId, parentFrameId, url, getFrameOffset=null) { +    constructor(id, depth, parentId, parentFrameId, url, getFrameOffset=null, setDisabled=null) {          this._parentId = parentId;          this._parentFrameId = parentFrameId;          this._id = id; @@ -28,6 +28,7 @@ class PopupProxy {          this._url = url;          this._apiSender = new FrontendApiSender();          this._getFrameOffset = getFrameOffset; +        this._setDisabled = setDisabled;          this._frameOffset = null;          this._frameOffsetPromise = null; @@ -142,6 +143,10 @@ class PopupProxy {          try {              const offset = await this._frameOffsetPromise;              this._frameOffset = offset !== null ? offset : [0, 0]; +            if (offset === null && this._setDisabled !== null) { +                this._setDisabled(); +                return; +            }              this._frameOffsetUpdatedAt = now;          } catch (e) {              logError(e); |