From aa3a78173f724c1dc44ed9feabfc8cc14a06f3dc Mon Sep 17 00:00:00 2001 From: star knight <64941905+starknt@users.noreply.github.com> Date: Sun, 19 Jan 2025 23:25:30 +0800 Subject: [PATCH] fix(iframe-drawer): prevent top content from covering issues (#1249) Co-authored-by: Hakadao --- src/components/IframeDrawer.vue | 17 ++++++++++++++-- src/components/IframePage.vue | 4 ++-- src/contentScripts/views/App.vue | 34 +++++++++++++++++++------------- src/styles/removeBiliTopBar.scss | 6 ++++++ src/utils/main.ts | 19 ++++++++++++++++++ 5 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/components/IframeDrawer.vue b/src/components/IframeDrawer.vue index 70428af6..bf18b57f 100644 --- a/src/components/IframeDrawer.vue +++ b/src/components/IframeDrawer.vue @@ -21,11 +21,23 @@ const headerShow = ref(false) const iframeRef = ref(null) const currentUrl = ref(props.url) const delayCloseTimer = ref(null) +const removeTopBarClassInjected = ref(false) useEventListener(window, 'popstate', updateIframeUrl) nextTick(() => { useEventListener(iframeRef.value?.contentWindow, 'historyChange', updateCurrentUrl) useEventListener(iframeRef.value?.contentWindow, 'popstate', updateCurrentUrl) + + useEventListener(iframeRef.value?.contentWindow, 'DOMContentLoaded', () => { + if (headerShow.value) { + iframeRef.value?.contentWindow?.document.documentElement.classList.add('remove-bili-top-bar-without-placeholder') + removeTopBarClassInjected.value = true + } + else { + iframeRef.value?.contentWindow?.document.documentElement.classList.remove('remove-bili-top-bar-without-placeholder') + removeTopBarClassInjected.value = false + } + }) }) onMounted(() => { @@ -238,11 +250,12 @@ watchEffect(() => { ref="iframeRef" :src="props.url" :style="{ - bottom: headerShow ? `var(--bew-top-bar-height)` : '0', + // Prevent top bar shaking when before the remove-bili-top-bar-without-placeholder class is injected + top: !removeTopBarClassInjected ? `calc(-1 * var(--bew-top-bar-height))` : '0', }" frameborder="0" pointer-events-auto - pos="absolute left-0" + pos="relative left-0" w-full h-full /> diff --git a/src/components/IframePage.vue b/src/components/IframePage.vue index b79c4ebb..ac41ec67 100644 --- a/src/components/IframePage.vue +++ b/src/components/IframePage.vue @@ -59,7 +59,7 @@ defineExpose({