2026-08-08 10:14:07 +08:00
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { onBeforeUnmount, onMounted } from 'vue'
|
2026-07-30 17:59:42 +08:00
|
|
|
|
2026-08-08 10:14:07 +08:00
|
|
|
let readyInterval: number | null = null
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
const configuredAdminOrigin = String(import.meta.env.VITE_ADMIN_WEB_ORIGIN || '').trim()
|
|
|
|
|
const targetOrigin = configuredAdminOrigin || window.location.origin
|
|
|
|
|
const announceReady = () => window.opener?.postMessage({ source: 'chongchong-client', type: 'impersonation-ready' }, targetOrigin)
|
|
|
|
|
announceReady()
|
|
|
|
|
readyInterval = window.setInterval(announceReady, 300)
|
|
|
|
|
window.setTimeout(() => {
|
|
|
|
|
if (readyInterval !== null) window.clearInterval(readyInterval)
|
|
|
|
|
readyInterval = null
|
|
|
|
|
}, 10000)
|
|
|
|
|
window.addEventListener('message', stopReadyAnnouncement)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
function stopReadyAnnouncement(event: MessageEvent<unknown>) {
|
|
|
|
|
const configuredAdminOrigin = String(import.meta.env.VITE_ADMIN_WEB_ORIGIN || '').trim()
|
|
|
|
|
const expectedAdminOrigin = configuredAdminOrigin || window.location.origin
|
|
|
|
|
const message = event.data as { source?: string; type?: string } | null
|
|
|
|
|
if (event.source !== window.opener || event.origin !== expectedAdminOrigin || message?.source !== 'chongchong-admin' || message.type !== 'impersonation-ticket' || readyInterval === null) return
|
|
|
|
|
window.clearInterval(readyInterval)
|
|
|
|
|
readyInterval = null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onBeforeUnmount(() => {
|
|
|
|
|
if (readyInterval !== null) window.clearInterval(readyInterval)
|
|
|
|
|
window.removeEventListener('message', stopReadyAnnouncement)
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template><RouterView /></template>
|