|
|
|
@ -12,13 +12,14 @@ |
|
|
|
</template> |
|
|
|
<script lang="ts" setup> |
|
|
|
import type { CSSProperties } from 'vue'; |
|
|
|
import { ref, unref, computed } from 'vue'; |
|
|
|
import { ref, unref, computed, onMounted, onUnmounted } from 'vue'; |
|
|
|
import { Spin } from 'ant-design-vue'; |
|
|
|
import { useWindowSizeFn } from '@vben/hooks'; |
|
|
|
import { propTypes } from '@/utils/propTypes'; |
|
|
|
import { useDesign } from '@/hooks/web/useDesign'; |
|
|
|
import { useLayoutHeight } from '@/layouts/default/content/useContentViewHeight'; |
|
|
|
|
|
|
|
const emit = defineEmits(['message']); |
|
|
|
defineProps({ |
|
|
|
frameSrc: propTypes.string.def(''), |
|
|
|
}); |
|
|
|
@ -54,6 +55,34 @@ |
|
|
|
loading.value = false; |
|
|
|
calcHeight(); |
|
|
|
} |
|
|
|
|
|
|
|
const messageHandler = (e: MessageEvent) => { |
|
|
|
emit('message', e.data); |
|
|
|
}; |
|
|
|
|
|
|
|
const postMessage = (message: any, tragetOrigin: string, transfer?: Transferable[]) => { |
|
|
|
const iframe = unref(frameRef); |
|
|
|
if (!iframe) return; |
|
|
|
iframe.contentWindow?.postMessage(message, tragetOrigin, transfer); |
|
|
|
}; |
|
|
|
|
|
|
|
const reload = () => { |
|
|
|
loading.value = true; |
|
|
|
const iframe = frameRef.value; |
|
|
|
if (!iframe) return; |
|
|
|
iframe.contentWindow?.location.reload(); |
|
|
|
loading.value = false; |
|
|
|
}; |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
window.addEventListener('message', messageHandler); |
|
|
|
}); |
|
|
|
|
|
|
|
onUnmounted(() => { |
|
|
|
window.removeEventListener('message', messageHandler); |
|
|
|
}); |
|
|
|
|
|
|
|
defineExpose({ postMessage, reload }); |
|
|
|
</script> |
|
|
|
<style lang="less" scoped> |
|
|
|
@prefix-cls: ~'@{namespace}-iframe-page'; |
|
|
|
|