From 94af3822d852bc7d3df3a52c3256fea11c0b4d54 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 21 Dec 2024 12:34:08 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/electron.js | 25 ++++--- resources/assets/js/components/OnlyOffice.vue | 70 +++++++++++-------- resources/assets/js/store/actions.js | 11 +-- 3 files changed, 63 insertions(+), 43 deletions(-) diff --git a/electron/electron.js b/electron/electron.js index 054c2312c..3f174ae55 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -578,8 +578,6 @@ function createWebTabWindow(args) { // 创建父级窗口 if (!webTabWindow) { - let config = Object.assign(args.config || {}, userConf.get('webTabWindow', {})); - let webPreferences = args.webPreferences || {}; const titleBarOverlay = { height: webTabHeight } @@ -600,14 +598,14 @@ function createWebTabWindow(args) { titleBarStyle: 'hidden', titleBarOverlay, backgroundColor: nativeTheme.shouldUseDarkColors ? '#3B3B3D' : '#EFF0F4', - webPreferences: Object.assign({ + webPreferences: { preload: path.join(__dirname, 'electron-preload.js'), webSecurity: true, nodeIntegration: true, contextIsolation: true, nativeWindowOpen: true - }, webPreferences), - }, config)) + }, + }, userConf.get('webTabWindow', {}))) webTabWindow.on('resize', () => { resizeWebTab(0) @@ -672,15 +670,20 @@ function createWebTabWindow(args) { webTabWindow.show(); // 创建 tab 子窗口 - const browserView = new BrowserView({ + const viewOptions = Object.assign({ useHTMLTitleAndIcon: true, useLoadingView: true, useErrorView: true, - webPreferences: { - preload: path.join(__dirname, 'electron-preload.js'), - } - }) - if (nativeTheme.shouldUseDarkColors) { + }, args.config || {}) + viewOptions.webPreferences = Object.assign({ + preload: path.join(__dirname, 'electron-preload.js'), + nodeIntegration: true, + contextIsolation: true + }, args.webPreferences || {}) + const browserView = new BrowserView(viewOptions) + if (args.backgroundColor) { + browserView.setBackgroundColor(args.backgroundColor) + } else if (nativeTheme.shouldUseDarkColors) { browserView.setBackgroundColor('#575757') } else { browserView.setBackgroundColor('#FFFFFF') diff --git a/resources/assets/js/components/OnlyOffice.vue b/resources/assets/js/components/OnlyOffice.vue index 8dc73a63f..b6062e5e4 100644 --- a/resources/assets/js/components/OnlyOffice.vue +++ b/resources/assets/js/components/OnlyOffice.vue @@ -180,6 +180,23 @@ export default { return type; }, + async getUserData() { + if (!this.userInfo.userid && this.userId && this.userToken) { + this.$store.dispatch("showSpinner", 300).then(_ => {}) + try { + await this.$store.dispatch("getUserInfo"); + } catch (e) { + console.warn(e); + } finally { + this.$store.dispatch("hiddenSpinner").then(_ => {}) + } + } + return { + "id": String(this.userInfo.userid), + "name": this.userInfo.nickname + } + }, + loadFile(keyAppend = '') { if (this.docEditor !== null) { this.docEditor.destroyEditor(); @@ -199,35 +216,32 @@ export default { if (this.historyId > 0) { fileKey += `-${this.historyId}` } - const config = { - "document": { - "fileType": this.fileType, - "title": fileName, - "key": fileKey, - "url": `http://nginx/api/${this.fileUrl}`, - }, - "editorConfig": { - "mode": "edit", - "lang": lang, - "user": { - "id": String(this.userInfo.userid), - "name": this.userInfo.nickname - }, - "customization": { - "uiTheme": this.themeName === 'dark' ? "theme-dark" : "theme-classic-light", - "forcesave": true, - "help": false, - }, - "callbackUrl": `http://nginx/api/file/content/office?id=${codeId}&dootask-token=${this.userToken}`, - }, - "events": { - "onDocumentReady": this.onDocumentReady, - }, - }; - if (/\/hideenOfficeTitle\//.test(window.navigator.userAgent)) { - config.document.title = " "; - } (async _ => { + const config = { + "document": { + "fileType": this.fileType, + "title": fileName, + "key": fileKey, + "url": `http://nginx/api/${this.fileUrl}`, + }, + "editorConfig": { + "mode": "edit", + "lang": lang, + "user": await this.getUserData(), + "customization": { + "uiTheme": this.themeName === 'dark' ? "theme-dark" : "theme-classic-light", + "forcesave": true, + "help": false, + }, + "callbackUrl": `http://nginx/api/file/content/office?id=${codeId}&dootask-token=${this.userToken}`, + }, + "events": { + "onDocumentReady": this.onDocumentReady, + }, + }; + if (/\/hideenOfficeTitle\//.test(window.navigator.userAgent)) { + config.document.title = " "; + } if (this.readOnly || this.historyId > 0) { config.editorConfig.mode = "view"; config.editorConfig.callbackUrl = null; diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 0f2f61480..0745c45a0 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1107,8 +1107,8 @@ export default { * @param params */ async openChildWindow({dispatch}, params) { - const path = await dispatch("userUrl", params.path) - $A.Electron.sendMessage('openChildWindow', Object.assign(params, {path})) + params.path = await dispatch("userUrl", params.path) + $A.Electron.sendMessage('openChildWindow', params) }, /** @@ -1117,10 +1117,13 @@ export default { * @param url */ async openWebTabWindow({dispatch}, url) { + const params = {url} if ($A.getDomain(url) == $A.getDomain($A.mainUrl())) { - url = await dispatch("userUrl", url) + params.url = await dispatch("userUrl", url) + } else { + params.webPreferences = {contextIsolation: false} } - $A.Electron.sendMessage('openWebTabWindow', {url}) + $A.Electron.sendMessage('openWebTabWindow', params) }, /** *****************************************************************************************/