diff options
| author | siikamiika <siikamiika@users.noreply.github.com> | 2020-04-18 23:39:21 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-18 23:39:21 +0300 | 
| commit | 7a03ce0194fafb0c2e49994dc6efd33d5fdb6a07 (patch) | |
| tree | 68a6bc438180e9b3871cee4755a78b18ba3fa3e1 /ext/fg/js/frontend-initialize.js | |
| parent | 5b3d7fadc3534ba27eee971dac4ba5ee475c4e3d (diff) | |
| parent | d66ca93ce4d6a4c9814bac4cc508c24ff87b8f69 (diff) | |
Merge pull request #460 from siikamiika/iframe-popup-edge-cases
Iframe popup edge cases
Diffstat (limited to 'ext/fg/js/frontend-initialize.js')
| -rw-r--r-- | ext/fg/js/frontend-initialize.js | 17 | 
1 files changed, 13 insertions, 4 deletions
| diff --git a/ext/fg/js/frontend-initialize.js b/ext/fg/js/frontend-initialize.js index 2b942258..2df59e20 100644 --- a/ext/fg/js/frontend-initialize.js +++ b/ext/fg/js/frontend-initialize.js @@ -16,6 +16,7 @@   */  /* global + * DOM   * FrameOffsetForwarder   * Frontend   * PopupProxy @@ -24,7 +25,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 +39,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 +79,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 +96,8 @@ async function main() {          }          let popup; -        if (isIframe && options.general.showIframePopupsInRootFrame) { -            popup = popups.iframe || await createIframePopupProxy(url, frameOffsetForwarder); +        if (isIframe && options.general.showIframePopupsInRootFrame && DOM.getFullscreenElement() === null && iframePopupsInRootFrameAvailable) { +            popup = popups.iframe || await createIframePopupProxy(url, frameOffsetForwarder, disableIframePopupsInRootFrame);              popups.iframe = popup;          } else if (proxy) {              popup = popups.proxy || await createPopupProxy(depth, id, parentFrameId, url); @@ -117,6 +125,7 @@ async function main() {      };      yomichan.on('optionsUpdated', applyOptions); +    window.addEventListener('fullscreenchange', applyOptions, false);      await applyOptions();  } |