From 39c657b4b6095d97d0197b5117641235e0540427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=98=8A=E5=A4=A9?= <442384644@qq.com> Date: Mon, 28 Sep 2026 17:17:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20toHttpsUrl=20?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BB=A5=E7=A1=AE=E4=BF=9D=20iframe=20?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E4=BD=BF=E7=94=A8=20https=20=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=EF=BC=8C=E9=81=BF=E5=85=8D=20Mixed=20Content=20?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/admin/src/diy/pages/devise/list.vue | 6 +++--- frontend/admin/src/diy/pages/devise/template.vue | 3 ++- .../admin/src/diy/pages/legacy/devisePage/index.vue | 6 +++--- frontend/admin/src/libs/util.js | 12 ++++++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/frontend/admin/src/diy/pages/devise/list.vue b/frontend/admin/src/diy/pages/devise/list.vue index 4c4a66132..accfae1ed 100644 --- a/frontend/admin/src/diy/pages/devise/list.vue +++ b/frontend/admin/src/diy/pages/devise/list.vue @@ -199,7 +199,7 @@ import { import QRCode from '@/vendor/qrcodejs2'; import goodClass from './goodClass'; import users from './users'; -import { getCookies, setCookies } from '@/libs/util'; +import { getCookies, setCookies, toHttpsUrl } from '@/libs/util'; import { modalSure } from '@/utils/public'; import { useMobildConfigStore } from '@diy/store/mobildConfig'; @@ -266,7 +266,7 @@ watch( // created cardShow.value = route.params.type; diyProList(); -iframeUrl.value = `${Setting.h5BaseURL || location.origin}/pages/index/index?mdType=iframeWindow`; +iframeUrl.value = `${toHttpsUrl(Setting.h5BaseURL) || location.origin}/pages/index/index?mdType=iframeWindow`; getToken(); onMounted(() => { @@ -327,7 +327,7 @@ function cancel() { function refreshFrame() { iframeUrl.value = ''; setTimeout((e) => { - iframeUrl.value = `${Setting.h5BaseURL || location.origin}/pages/index/index?mdType=iframeWindow`; + iframeUrl.value = `${toHttpsUrl(Setting.h5BaseURL) || location.origin}/pages/index/index?mdType=iframeWindow`; }, 200); } function getChildData(e) { diff --git a/frontend/admin/src/diy/pages/devise/template.vue b/frontend/admin/src/diy/pages/devise/template.vue index 9b060e81c..48c899152 100644 --- a/frontend/admin/src/diy/pages/devise/template.vue +++ b/frontend/admin/src/diy/pages/devise/template.vue @@ -26,6 +26,7 @@ import { ref, onMounted } from 'vue'; import { useRoute } from 'vue-router'; import { diyGetInfo } from '@diy/api'; import Setting from '@/setting'; +import { toHttpsUrl } from '@/libs/util'; import rightConfig from '@diy/components/legacy/rightConfig/index'; import links from './links'; import { useMorenStore } from '@diy/store/legacy/moren'; @@ -59,7 +60,7 @@ function handleMessage(event) { { let pageIdQuery = route.query.id; pageId.value = parseInt(pageIdQuery); - iframeUrl.value = `${Setting.h5BaseURL || location.origin}/pages/index/index?mdType=iframeWindow`; + iframeUrl.value = `${toHttpsUrl(Setting.h5BaseURL) || location.origin}/pages/index/index?mdType=iframeWindow`; diyGetInfo(parseInt(pageIdQuery)).then((datas) => { let data = datas.data.info.value; upData(data); diff --git a/frontend/admin/src/diy/pages/legacy/devisePage/index.vue b/frontend/admin/src/diy/pages/legacy/devisePage/index.vue index e91551e0c..5c770a650 100644 --- a/frontend/admin/src/diy/pages/legacy/devisePage/index.vue +++ b/frontend/admin/src/diy/pages/legacy/devisePage/index.vue @@ -26,7 +26,7 @@ import { ref, onMounted } from 'vue'; import { useRoute } from 'vue-router'; import { diyGetInfo, diySave } from '@diy/api'; import rightConfig from '@diy/components/legacy/rightConfig/index'; -import { getCookies, setCookies } from '@/libs/util'; +import { getCookies, setCookies, toHttpsUrl } from '@/libs/util'; import { useMorenStore } from '@diy/store/legacy/moren'; import Setting from '@/setting'; @@ -72,9 +72,9 @@ let show = true; pageId.value = parseInt(routePageId); let moveLink = getCookies('moveLink'); if (Number(route.query.type) === 1) { - iframeUrl.value = `${moveLink}/pages/index/index?mdType=iframeWindow`; + iframeUrl.value = `${toHttpsUrl(moveLink)}/pages/index/index?mdType=iframeWindow`; } else { - iframeUrl.value = `${Setting.h5BaseURL || location.origin}/pages/index/index?mdType=iframeWindow`; + iframeUrl.value = `${toHttpsUrl(Setting.h5BaseURL) || location.origin}/pages/index/index?mdType=iframeWindow`; } diyGetInfo(parseInt(routePageId)).then((datas) => { let data = datas.data.info.value; diff --git a/frontend/admin/src/libs/util.js b/frontend/admin/src/libs/util.js index cd3c669a1..41c66da22 100644 --- a/frontend/admin/src/libs/util.js +++ b/frontend/admin/src/libs/util.js @@ -30,6 +30,18 @@ export const removeCookies = (key) => { return Cookies.remove(`${packageConfig.name}:${key}`); }; +/** + * 预览 iframe 地址协议自愈:https 页面下把 http 地址升级为 https,避免被 Mixed Content 拦截 + * @param {String} url 预览地址(域名或完整地址) + * @returns {String} + */ +export const toHttpsUrl = (url) => { + if (typeof url === 'string' && location.protocol === 'https:' && /^http:\/\//i.test(url)) { + return url.replace(/^http:\/\//i, 'https://'); + } + return url; +}; + export const hasChild = (item) => { return item.children && item.children.length !== 0; };