diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index d4282d337..e490c5264 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -411,7 +411,7 @@ export default { return 1; } // 同域名规则 - if ($A.getDomain(url) == $A.getDomain($A.mainUrl())) { + if ($A.getDomain(url) == $A.mainDomain()) { try { const {pathname, searchParams} = new URL(url); // meeting/1234567890/xxxxx 会议 @@ -438,7 +438,7 @@ export default { }, isDownloadUrl(url) { - if ($A.getDomain(url) == $A.getDomain($A.mainUrl())) { + if ($A.getDomain(url) == $A.mainDomain()) { try { const {pathname, searchParams} = new URL(url); // 匹配常见的下载相关路径 diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 77346935e..77afed562 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -129,7 +129,7 @@ Vue.prototype.goForward = function(route, isReplace, autoBroadcast = true) { if (typeof route === 'string') { if ($A.strExists(route, '/')) { if (/^https?:\/\//.test(route)) { - if ($A.getDomain(route) === $A.getDomain($A.mainUrl())) { + if ($A.getDomain(route) === $A.mainDomain()) { route = route.replace(/^https?:\/\/[^\/]+/, ''); } else { // 处理外部链接 @@ -357,7 +357,7 @@ const $preload = async () => { document.querySelector(".app-view-loading")?.setAttribute("data-visible", "false") window.__initializeApp = async (loadHash) => { if (/^https?:\/\//.test(loadHash)) { - if ($A.getDomain(loadHash) !== $A.getDomain($A.mainUrl())) { + if ($A.getDomain(loadHash) !== $A.mainDomain()) { window.location.href = url; return; } diff --git a/resources/assets/js/components/RightBottom.vue b/resources/assets/js/components/RightBottom.vue index 15f2450a0..bb16c9952 100644 --- a/resources/assets/js/components/RightBottom.vue +++ b/resources/assets/js/components/RightBottom.vue @@ -159,7 +159,7 @@ export default { if (this.compareVersion(this.apiVersion, '0.19.0') === -1) { $A.modalWarning({ title: '温馨提示', - message: `服务器(${$A.getDomain($A.mainUrl())})接口版本过低,部分功能可能无法正常使用。`, + message: `服务器(${$A.mainDomain()})接口版本过低,部分功能可能无法正常使用。`, }); } if (this.$Electron) { diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index 2ff93b6b5..3b0cce599 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1185,7 +1185,7 @@ const timezone = require("dayjs/plugin/timezone"); getDomain(weburl) { const urlReg = /http(s)?:\/\/([^\/]+)/i; const domain = `${weburl}`.match(urlReg); - return ((domain != null && domain.length > 0) ? domain[2] : ""); + return ((domain != null && domain.length > 0) ? domain[2] : "").toLowerCase(); }, /** diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js index 77ed0a9e6..5bbf2ab62 100755 --- a/resources/assets/js/functions/web.js +++ b/resources/assets/js/functions/web.js @@ -62,6 +62,29 @@ import {convertLocalResourcePath} from "../components/Replace/utils"; return $A.apiUrl(`../${str}`) }, + /** + * 获取 mainUrl 的域名 + * @returns {string} + */ + mainDomain() { + return $A.getDomain($A.mainUrl()); + }, + + /** + * 移除 mainUrl 前缀(忽略 http/https 协议差异,只匹配域名) + * @param url + * @returns {string} 匹配时返回带前导斜杠的路径(如 /path/to),不匹配时返回原始 url + */ + removeMainUrlPrefix(url) { + url = url + ""; + const urlDomain = $A.getDomain(url); + const mainDomain = $A.mainDomain(); + if (urlDomain && mainDomain && urlDomain === mainDomain) { + return url.replace(/^https?:\/\/[^\/]+/, ''); + } + return url; + }, + /** * 服务地址 * @param str @@ -514,7 +537,7 @@ import {convertLocalResourcePath} from "../components/Replace/utils"; * @returns {boolean} */ isDooServer() { - const u = $A.getDomain($A.mainUrl()) + const u = $A.mainDomain() return /dootask\.com$/.test(u) || /hitosea\.com$/.test(u) || /^127\.0\.0\.1/.test(u) @@ -598,7 +621,7 @@ import {convertLocalResourcePath} from "../components/Replace/utils"; if (!/\.(png|jpg|jpeg)$/.test(url)) { return false } - return $A.getDomain(url) == $A.getDomain($A.mainUrl()); + return $A.getDomain(url) == $A.mainDomain(); }, /** diff --git a/resources/assets/js/pages/manage/application.vue b/resources/assets/js/pages/manage/application.vue index cd8dfda4e..cb0418dd0 100644 --- a/resources/assets/js/pages/manage/application.vue +++ b/resources/assets/js/pages/manage/application.vue @@ -1202,10 +1202,10 @@ export default { const arr = (text + "").match(/^https?:\/\/(.*?)\/login\?qrcode=(.*?)$/) if (arr) { // 扫码登录 - if ($A.getDomain(text) != $A.getDomain($A.mainUrl())) { + if ($A.getDomain(text) != $A.mainDomain()) { let content = this.$L('请确认扫码的服务器与当前服务器一致') content += `
${this.$L('二维码服务器')}: ${$A.getDomain(text)}` - content += `
${this.$L('当前服务器')}: ${$A.getDomain($A.mainUrl())}` + content += `
${this.$L('当前服务器')}: ${$A.mainDomain()}` $A.modalWarning({ language: false, title: this.$L('扫码登录'), diff --git a/resources/assets/js/pages/manage/components/MeetingManager/index.vue b/resources/assets/js/pages/manage/components/MeetingManager/index.vue index 407cca612..d79e37c9a 100644 --- a/resources/assets/js/pages/manage/components/MeetingManager/index.vue +++ b/resources/assets/js/pages/manage/components/MeetingManager/index.vue @@ -401,9 +401,7 @@ export default { width: Math.min(window.screen.availWidth, 1440), height: Math.min(window.screen.availHeight, 900), } - const meetingLink = $A.leftDelete(linkRes.data, $A.mainUrl()) - .replace(/^\//, ''); - const meetingPath = $A.urlAddParams("/" + meetingLink, { + const meetingPath = $A.urlAddParams($A.removeMainUrlPrefix(linkRes.data), { type: 'direct', nickname: data.nickname, avatar: data.userimg, diff --git a/resources/assets/js/pages/manage/setting/index.vue b/resources/assets/js/pages/manage/setting/index.vue index 8f04251f9..a1c359ba7 100644 --- a/resources/assets/js/pages/manage/setting/index.vue +++ b/resources/assets/js/pages/manage/setting/index.vue @@ -220,7 +220,7 @@ export default { async onVersion() { const array = [ - `${this.$L('服务器')}: ${$A.getDomain($A.mainUrl())}` + `${this.$L('服务器')}: ${$A.mainDomain()}` ] if (this.serverVersion) { array.push(`${this.$L('服务器版本')}: v${this.serverVersion}`) diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index 91de94ca8..d268113a6 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -1287,7 +1287,7 @@ export default { userUrl({state}, url) { return new Promise(resolve => { // 如果是访问:服务器域名 且 当前是本地文件,则将服务器域名替换成本地路径 - if ($A.getDomain(url) == $A.getDomain($A.mainUrl()) && isLocalHost(window.location)) { + if ($A.getDomain(url) == $A.mainDomain() && isLocalHost(window.location)) { try { const remoteURL = new URL(url) if (/^\/(single|meeting)\//.test(remoteURL.pathname)) { @@ -1308,7 +1308,7 @@ export default { userid: state.userId, } // 如果是访问:服务器域名 或 本地文件,则添加 token 参数 - if ($A.getDomain(url) == $A.getDomain($A.mainUrl()) || isLocalHost(url)) { + if ($A.getDomain(url) == $A.mainDomain() || isLocalHost(url)) { params.token = state.userToken } resolve($A.urlAddParams(url, params)) @@ -1402,7 +1402,7 @@ export default { // 外站 URL 自动移除 preload 脚本(通过 contextIsolation: false) const pathDomain = $A.getDomain(params.path) - const isExternal = pathDomain && pathDomain !== $A.getDomain($A.mainUrl()) + const isExternal = pathDomain && pathDomain !== $A.mainDomain() if (isExternal) { params.webPreferences = Object.assign({contextIsolation: false}, params.webPreferences) } else {