From c20347d95ead8c7f3b6324680fa5ba1c4c6f18b2 Mon Sep 17 00:00:00 2001 From: zzs Date: Fri, 21 Mar 2025 11:51:27 +0800 Subject: [PATCH] wip: init iframe settings --- src/logics/initAppConfig.ts | 6 + src/router/guard/permissionGuard.ts | 4 + src/settings/projectSetting.ts | 8 +- src/utils/iframe.ts | 10 ++ src/views/infra/bookmark/event.data.ts | 25 ++++ src/views/infra/bookmark/index.vue | 169 +------------------------ 6 files changed, 56 insertions(+), 166 deletions(-) create mode 100644 src/utils/iframe.ts create mode 100644 src/views/infra/bookmark/event.data.ts diff --git a/src/logics/initAppConfig.ts b/src/logics/initAppConfig.ts index 563d6ae..fce0fe3 100644 --- a/src/logics/initAppConfig.ts +++ b/src/logics/initAppConfig.ts @@ -21,6 +21,7 @@ import { getCommonStoragePrefix, getStorageShortName } from '@/utils/env' import { Persistent } from '@/utils/cache/persistent' import { deepMerge } from '@/utils' import { ThemeEnum } from '@/enums/appEnum' +import { isInIframe } from '@/utils/iframe' // Initial project configuration export function initAppConfigStore() { @@ -47,6 +48,11 @@ export function initAppConfigStore() { catch (error) { console.log(error) } + + // 如果当前界面被当作iframe使用,设置页面全屏显示 + console.warn(`${isInIframe()}__isInIframe`) + projCfg.fullContent = isInIframe() + appStore.setProjectConfig(projCfg) // init dark mode diff --git a/src/router/guard/permissionGuard.ts b/src/router/guard/permissionGuard.ts index 97016b3..dbc794c 100644 --- a/src/router/guard/permissionGuard.ts +++ b/src/router/guard/permissionGuard.ts @@ -31,6 +31,10 @@ export function createPermissionGuard(router: Router) { // return // } + const routerToken = to.query.token || to.query.access_token || undefined + if (routerToken) + userStore.setAccessToken(routerToken as string) + const token = userStore.getAccessToken // Whitelist can be directly entered diff --git a/src/settings/projectSetting.ts b/src/settings/projectSetting.ts index 52d3c30..6454922 100644 --- a/src/settings/projectSetting.ts +++ b/src/settings/projectSetting.ts @@ -44,7 +44,7 @@ const setting: ProjectConfig = { // 色弱模式 colorWeak: false, // 是否取消菜单,顶部,多标签页显示, 用于可能内嵌在别的系统内 - fullContent: false, + fullContent: true, // 主题内容宽度 contentMode: ContentEnum.FULL, // 是否显示logo @@ -116,7 +116,7 @@ const setting: ProjectConfig = { // 多标签 multiTabsSetting: { // 刷新后是否保留已经打开的标签页 - cache: false, + cache: true, // 开启 show: true, // 显示图标 @@ -155,8 +155,8 @@ const setting: ProjectConfig = { // 是否使用全局错误捕获 useErrorHandle: false, // 是否开启回到顶部 - useOpenBackTop: true, - // 是否可以嵌入iframe页面 + useOpenBackTop: false, + // 是否可以嵌入iframe页面 canEmbedIFramePage: true, // 切换界面的时候是否删除未关闭的message及notify closeMessageOnSwitch: true, diff --git a/src/utils/iframe.ts b/src/utils/iframe.ts new file mode 100644 index 0000000..a5eb846 --- /dev/null +++ b/src/utils/iframe.ts @@ -0,0 +1,10 @@ +// 检测当前页面是否被嵌套在 iframe 中 +export function isInIframe(): boolean { + try { + return window.self !== window.top + } + catch (e) { + // 如果跨域访问被拒绝,catch 会捕获异常 + return true + } +} diff --git a/src/views/infra/bookmark/event.data.ts b/src/views/infra/bookmark/event.data.ts new file mode 100644 index 0000000..a8a49b1 --- /dev/null +++ b/src/views/infra/bookmark/event.data.ts @@ -0,0 +1,25 @@ +/** + * 第三方调用者发送事件格式 + */ +export type ReceiveEventData = + | { + MessageId: 'OPEN_FILE' + Values: Blob | File + } + | { + MessageId: 'ACTION_SAVE' + Values?: null + } + | { + MessageId: never + Values?: never + } + +/** + * 浏览器主动回调第三方 + */ +export type CallbackEventData = + | { + Action: 'SAVE' + Values?: never + } diff --git a/src/views/infra/bookmark/index.vue b/src/views/infra/bookmark/index.vue index e08bcfa..a73b030 100644 --- a/src/views/infra/bookmark/index.vue +++ b/src/views/infra/bookmark/index.vue @@ -1,17 +1,12 @@