diff --git a/electron/lib/utils.js b/electron/lib/utils.js index 774bd406a..6eddf06a5 100644 --- a/electron/lib/utils.js +++ b/electron/lib/utils.js @@ -332,14 +332,14 @@ const utils = { * 新窗口打开事件 * @param webContents * @param url - * @returns {Promise} + * @returns {Promise} 页面未接管时 resolve;resolve(false) 表示页面明确要求用默认浏览器打开,resolve(undefined) 表示页面没有 __onBeforeOpenWindow */ onBeforeOpenWindow(webContents, url) { return new Promise(resolve => { const dataStr = JSON.stringify({url: url}) webContents.executeJavaScript(`if(typeof window.__onBeforeOpenWindow === 'function'){window.__onBeforeOpenWindow(${dataStr})}`, true).then(options => { if (options !== true) { - resolve() + resolve(options) } }).catch(_ => { resolve() diff --git a/electron/lib/web-tab-manager.js b/electron/lib/web-tab-manager.js index ca05e0703..052481190 100644 --- a/electron/lib/web-tab-manager.js +++ b/electron/lib/web-tab-manager.js @@ -745,8 +745,16 @@ function createWebTabView(windowId, args) { renderer.openExternal(url).catch(() => {}) }) } else if (url && url !== 'about:blank') { - // tab 模式下创建新标签 - createWebTabWindow({ url, afterId: browserView.webContents.id, windowId: browserView.webTabWindowId }) + // tab 模式下交给页面判断(同域名链接会追加用户身份后再打开),页面无此能力时直接创建新标签 + const afterId = browserView.webContents.id + const windowId = browserView.webTabWindowId + utils.onBeforeOpenWindow(browserView.webContents, url).then(handled => { + if (handled === false) { + renderer.openExternal(url).catch(() => {}) + } else { + createWebTabWindow({ url, afterId, windowId }) + } + }) } return { action: 'deny' } })