diff --git a/src/views/edit/index.vue b/src/views/edit/index.vue index b9534025..b67efa28 100644 --- a/src/views/edit/index.vue +++ b/src/views/edit/index.vue @@ -55,8 +55,8 @@ getDataBySession() // 返回父窗口 function back() { - opener.name = Date.now() - window.open(opener.location.href, opener.name) + window.opener.name = Date.now() + window.open(window.opener.location.href, window.opener.name) } // 导入json文本 @@ -71,7 +71,7 @@ async function importJSON() { } // 同步 [画布页失去焦点时同步数据到JSON页,JSON页Ctrl+S 时同步数据到画布页] -opener.addEventListener(SavePageEnum.CHART, (e: any) => { +window.opener.addEventListener(SavePageEnum.CHART, (e: any) => { setSessionStorage(StorageEnum.GO_CHART_STORAGE_LIST, [e.detail]) content.value = JSON.stringify(e.detail, undefined, 2) }) @@ -87,14 +87,14 @@ addEventListener('blur', updateSync) // 同步更新 function updateSync() { - if (!opener) { + if (!window.opener) { return window['$message'].error('源窗口已关闭,视图同步失败') } try { const detail = JSON.parse(content.value) delete detail.id // 保持id不变 - opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) + window.opener.dispatchEvent(new CustomEvent(SavePageEnum.JSON, { detail })) } catch (e) { window['$message'].error('内容格式有误') console.log(e) diff --git a/src/views/preview/wrapper.vue b/src/views/preview/wrapper.vue index 242910be..d209438a 100644 --- a/src/views/preview/wrapper.vue +++ b/src/views/preview/wrapper.vue @@ -1,5 +1,5 @@ <template> - <Preview :key="key"></Preview> + <preview :key="key"></preview> </template> <script setup lang="ts"> @@ -16,10 +16,10 @@ let localStorageInfo: ChartEditStorageType = getSessionStorageInfo() as ChartEdi // 数据变更 -> 同步sessionStorage -> reload页面 (重新执行Mounted) ;[SavePageEnum.JSON, SavePageEnum.CHART].forEach((saveEvent: string) => { - opener.addEventListener(saveEvent, (e: any) => { + if (!window.opener) return + window.opener.addEventListener(saveEvent, (e: any) => { setSessionStorage(StorageEnum.GO_CHART_STORAGE_LIST, [{ ...e.detail, id: localStorageInfo.id }]) key.value = Date.now() }) }) - </script> diff --git a/types/global.d.ts b/types/global.d.ts index cceade09..1b11026a 100644 --- a/types/global.d.ts +++ b/types/global.d.ts @@ -7,6 +7,8 @@ interface Window { $vue: any // 键盘按键记录 $KeyboardActive?: { [T: string]: boolean } + // 编辑 JSON 的存储对象 + opener: any } declare type Recordable<T = any> = Record<string, T>