diff --git a/src/components/RankListMini.vue b/src/components/RankListMini.vue index 8c239aa..7704581 100644 --- a/src/components/RankListMini.vue +++ b/src/components/RankListMini.vue @@ -71,6 +71,7 @@ import { ref, watch } from "vue"; import dayjs from "dayjs/esm/index"; import LoginPopup from "@/components/loginPopup/index.vue"; import { Session } from "@/utils/storage"; +import { judgeRuntimeEnv } from "@/utils/util"; const isExp = ref(true); const rankListLocal = ref([]); @@ -165,22 +166,25 @@ function goDetail(item) { // } let phone = props.userParams.phone || ""; let userType = props.userParams.userType || ""; - uni.navigateTo({ - url: `/pages/detail/indexNewsInfo?id=${item.news_id}&phone=${phone}&userType=${userType}`, - }); - let shareUrl = - "https://cankao.cs.com.cn/jnh/#/pages/detail/indexNewsInfo?id=" + - // "http://localhost:8881/jnh/#/pages/detail/indexNewsInfo?id=" + - item.news_id + - "&phone=" + - uni.getStorageSync("token") + - "&userType=" + - userType.value; + if (judgeRuntimeEnv().isWxMiniWebview) { + let shareUrl = + "https://cankao.cs.com.cn/jnh/#/pages/detail/indexNewsInfo?id=" + + // "http://localhost:8881/jnh/#/pages/detail/indexNewsInfo?id=" + + item.news_id + + "&phone=" + + uni.getStorageSync("token") + + "&userType=" + + userType.value; - wx.miniProgram.redirectTo({ - url: "/pages/webView/index?url=" + encodeURIComponent(shareUrl), - }); + wx.miniProgram.navigateTo({ + url: "/pages/webView/index?url=" + encodeURIComponent(shareUrl), + }); + } else { + uni.navigateTo({ + url: `/pages/detail/indexNewsInfo?id=${item.news_id}&phone=${phone}&userType=${userType}`, + }); + } } const LoginShow = ref(false); diff --git a/src/components/domesticMini.vue b/src/components/domesticMini.vue index 7f79897..1c0b38d 100644 --- a/src/components/domesticMini.vue +++ b/src/components/domesticMini.vue @@ -12,7 +12,18 @@ import { Session } from "@/utils/storage"; import { getDomestic } from "@/api/index"; import List from "@/components/articleList/indexDomestic.vue"; import { onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app"; +import { judgeRuntimeEnv } from "@/utils/util"; +import wx from "weixin-js-sdk"; +const props = defineProps({ + userParams: { + type: Object, + default: () => ({ + phone: "", + userType: "", + }), + }, +}); const newsList = ref([]); const form = reactive({ @@ -25,6 +36,27 @@ function doDetail(item) { uni.navigateTo({ url: "/pages/detail/indexNewsInfo?id=" + item.id + "&type=guonei", }); + + let phone = props.userParams.phone || ""; + let userType = props.userParams.userType || ""; + + if (judgeRuntimeEnv().isWxMiniWebview) { + let shareUrl = + "https://cankao.cs.com.cn/jnh/#/pages/detail/indexNewsInfo?id=" + + item.news_id + + "&phone=" + + uni.getStorageSync("token") + + "&userType=" + + userType.value; + + wx.miniProgram.navigateTo({ + url: "/pages/webView/index?url=" + encodeURIComponent(shareUrl), + }); + } else { + uni.navigateTo({ + url: `/pages/detail/indexNewsInfo?id=${item.news_id}&phone=${phone}&userType=${userType}`, + }); + } } async function getDomesticFn() { diff --git a/src/utils/util.ts b/src/utils/util.ts index 1c67ea7..60aa81d 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -88,3 +88,43 @@ export function getNavHeight() { return statusBarHeight; } + +import wx from "weixin-js-sdk"; +/** + * 判断当前环境:浏览器 / 微信小程序webview + * @returns {Object} { isBrowser: 布尔, isWxMiniWebview: 布尔 } + */ +export function judgeRuntimeEnv() { + // 初始化结果 + const result = { + isBrowser: false, + isWxMiniWebview: false, + }; + + // 1. 优先通过 uni-app 内置API判断(编译到小程序时生效) + try { + const systemInfo = uni.getSystemInfoSync(); + // 小程序环境(包括webview)的 platform 为 'devtools'(开发者工具)、'ios'、'android' + // 且不存在浏览器的 window.navigator 特征(或UA不含浏览器标识) + if (systemInfo.platform && !/(Chrome|Safari|Firefox)/i.test(navigator.userAgent)) { + // 进一步判断是否是微信小程序 + if (navigator.userAgent.includes("miniProgram")) { + result.isWxMiniWebview = true; + } + } + } catch (e) { + // uni.getSystemInfoSync 执行失败,说明不是小程序环境(如浏览器) + } + + // 2. 检测微信小程序特有全局对象(webview中会注入wx对象) + if (typeof wx !== "undefined" && wx.miniProgram) { + result.isWxMiniWebview = true; + } + + // 3. 检测浏览器环境(兜底判断) + if (typeof window !== "undefined" && typeof document !== "undefined" && !result.isWxMiniWebview) { + result.isBrowser = true; + } + + return result; +}