From d76cfd7f809ba48880c950a64cb43a5c9c44176c Mon Sep 17 00:00:00 2001 From: yanzhuang <qq984245844@gmail.com> Date: Sun, 1 Aug 2021 08:51:52 +0800 Subject: [PATCH] fix: fix iframe heigth error (#1012) --- src/views/sys/iframe/index.vue | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/src/views/sys/iframe/index.vue b/src/views/sys/iframe/index.vue index 6c1b15c..bafdca2 100644 --- a/src/views/sys/iframe/index.vue +++ b/src/views/sys/iframe/index.vue @@ -1,21 +1,25 @@ <template> <div :class="prefixCls" :style="getWrapStyle"> <Spin :spinning="loading" size="large" :style="getWrapStyle"> - <iframe :src="frameSrc" :class="`${prefixCls}__main`" ref="frameRef"></iframe> + <iframe + :src="frameSrc" + :class="`${prefixCls}__main`" + ref="frameRef" + @load="hideLoading" + ></iframe> </Spin> </div> </template> <script lang="ts"> import type { CSSProperties } from 'vue'; - import { defineComponent, ref, unref, onMounted, nextTick, computed } from 'vue'; + import { defineComponent, ref, unref, computed } from 'vue'; import { Spin } from 'ant-design-vue'; - import { getViewportOffset } from '/@/utils/domUtils'; - import { useWindowSizeFn } from '/@/hooks/event/useWindowSizeFn'; import { propTypes } from '/@/utils/propTypes'; import { useDesign } from '/@/hooks/web/useDesign'; + import { useLayoutHeight } from '/@/layouts/default/content/useContentViewHeight'; export default defineComponent({ name: 'IFrame', @@ -24,10 +28,11 @@ frameSrc: propTypes.string.def(''), }, setup() { - const loading = ref(false); + const loading = ref(true); const topRef = ref(50); const heightRef = ref(window.innerHeight); - const frameRef = ref<HTMLFrameElement | null>(null); + const frameRef = ref<HTMLFrameElement>(); + const { headerHeightRef } = useLayoutHeight(); const { prefixCls } = useDesign('iframe-page'); useWindowSizeFn(calcHeight, 150, { immediate: true }); @@ -43,8 +48,7 @@ if (!iframe) { return; } - let { top } = getViewportOffset(iframe); - top += 20; + const top = headerHeightRef.value; topRef.value = top; heightRef.value = window.innerHeight - top; const clientHeight = document.documentElement.clientHeight - top; @@ -56,33 +60,13 @@ calcHeight(); } - function init() { - nextTick(() => { - const iframe = unref(frameRef); - if (!iframe) return; - - const _frame = iframe as any; - if (_frame.attachEvent) { - _frame.attachEvent('onload', () => { - hideLoading(); - }); - } else { - iframe.onload = () => { - hideLoading(); - }; - } - }); - } - onMounted(() => { - loading.value = true; - init(); - }); - return { getWrapStyle, loading, frameRef, prefixCls, + + hideLoading, }; }, }); -- libgit2 0.23.3