zhuli 1 неделя назад
Родитель
Сommit
9807139ea8
1 измененных файлов с 95 добавлено и 14 удалено
  1. 95 14
      HBuilderProjects/shareIndex.html

+ 95 - 14
HBuilderProjects/shareIndex.html

@@ -1175,8 +1175,50 @@
 			return /MicroMessenger/i.test(navigator.userAgent || '');
 		}
 
+		function readQueryParam(name) {
+			try {
+				var v = new URLSearchParams(location.search || '').get(name);
+				return v == null ? '' : String(v);
+			} catch (eQ) {
+				return '';
+			}
+		}
+
 		function isWxDebugOn() {
-			return String(q('wxDebug') || '') === '1';
+			return readQueryParam('wxDebug') === '1';
+		}
+
+		/** PC 联调:测试域 / localhost 自动开启;也可显式 ?wxForce=1 */
+		function isWxForceDebug() {
+			return readQueryParam('wxForce') === '1';
+		}
+
+		function isWxConfigOnClickDebug() {
+			return readQueryParam('wxConfigOnClick') === '1';
+		}
+
+		function isWxPcAutoDebugHost() {
+			var h = (location.hostname || '').toLowerCase();
+			if (h === 'localhost' || h === '127.0.0.1') return true;
+			for (var i = 0; i < WECHAT_JS_SAFE_HOSTS.length; i++) {
+				if (WECHAT_JS_SAFE_HOSTS[i] === h) return true;
+			}
+			return false;
+		}
+
+		function isWxPcBrowser() {
+			return !isWeChatInAppBrowser();
+		}
+
+		function shouldInitWeChatJssdkOnLoad() {
+			if (isWeChatInAppBrowser()) return true;
+			return isWxForceDebug() || isWxPcAutoDebugHost();
+		}
+
+		function shouldFetchWxConfig(fromUserClick) {
+			if (isWeChatInAppBrowser()) return true;
+			if (fromUserClick) return true;
+			return isWxForceDebug() || isWxPcAutoDebugHost();
 		}
 
 		function getWxSignUrlFull() {
@@ -1452,23 +1494,22 @@
 			});
 		}
 
-		function initWeChatOpenLaunchApp() {
-			if (!isWeChatInAppBrowser()) {
-				console.log('[wx] 未调用 getWxConfig:当前不是微信内置浏览器');
+		function initWeChatOpenLaunchApp(fromUserClick) {
+			if (!shouldFetchWxConfig(!!fromUserClick)) {
+				console.log('[wx] 未调用 getWxConfig');
 				return Promise.resolve(false);
 			}
-			if (wxJssdkInitPromise) return wxJssdkInitPromise;
+			if (isWxPcBrowser()) {
+				console.warn(
+					'[wx] PC:请求 getWxConfig' + (fromUserClick ? '(按钮)' : '(进页)')
+				);
+			}
+			if (wxJssdkInitPromise && !fromUserClick) return wxJssdkInitPromise;
 
 			wxConfigSignRetriedBaseUrl = false;
 			wxInitLastError = '';
 			var signPageUrl = getWxConfigSignUrl();
 
-			if (typeof wx === 'undefined') {
-				setWxInitError('jweixin.js 未加载,无法请求 getWxConfig');
-				console.warn('[wx] 未调用 getWxConfig:wx 对象不存在');
-				return Promise.resolve(false);
-			}
-
 			bindWeChatLaunchTagEvents();
 			wxJssdkInitPromise = fetchWeChatJssdkSign(signPageUrl)
 				.then(function (sign) {
@@ -1481,6 +1522,14 @@
 							'后端 appId=' + sign.appId + ',应为服务号 ' + WECHAT_MP_APP_ID
 						);
 					}
+					if (typeof wx === 'undefined') {
+						if (isWxPcBrowser()) {
+							console.log('[wx] PC getWxConfig 成功', sign);
+							return true;
+						}
+						setWxInitError('jweixin.js 未加载');
+						return false;
+					}
 					return applyWxConfig(sign, signPageUrl).then(function (ok) {
 						if (!ok && !wxInitLastError) {
 							setWxInitError('wx.config 失败,可加 ?wxDebug=1');
@@ -1502,7 +1551,7 @@
 
 		/** 进页即尝试拉签名;jweixin 晚到时自动重试 */
 		function scheduleWeChatJssdkBootstrap() {
-			if (!isWeChatInAppBrowser()) return;
+			if (!shouldInitWeChatJssdkOnLoad()) return;
 			var attempts = 0;
 			function tick() {
 				attempts += 1;
@@ -1561,10 +1610,37 @@
 		 * 有 plus:检测 App 是否安装后 openURL;深链形如 shopro://{APP_UNI_STORE_PATH}?…
 		 * 系统浏览器:唤起 scheme;微信内常拦截 scheme,需「在浏览器打开」。
 		 */
+		function tryFetchWxConfigOnPcClick() {
+			if (!isWxPcBrowser()) return Promise.resolve(false);
+			showFabToast('正在请求 getWxConfig…');
+			wxJssdkInitPromise = null;
+			return initWeChatOpenLaunchApp(true).then(function (ok) {
+				if (ok) {
+					showFabToast(
+						weChatJssdkConfigured
+							? 'getWxConfig 成功,wx.config 已就绪'
+							: 'getWxConfig 成功'
+					);
+				} else {
+					showFabToast(wxInitLastError || 'getWxConfig 失败');
+				}
+				return ok;
+			});
+		}
+
 		function tryOpenHBuilderApp() {
 			/* 微信内须直接点击 wx-open-launch-app,scheme 会被拦截 */
 			if (isWeChatInAppBrowser()) return;
 
+			tryFetchWxConfigOnPcClick().then(function () {
+				if (isWxConfigOnClickDebug() && !isWxForceDebug() && !isWxPcAutoDebugHost()) {
+					return;
+				}
+				tryOpenHBuilderAppViaScheme();
+			});
+		}
+
+		function tryOpenHBuilderAppViaScheme() {
 			showFabToast('正在打开 U店在哪…');
 			var deepLink = buildAppDeepLink();
 
@@ -2769,9 +2845,14 @@
 			var launchTag = document.getElementById('launch-btn');
 			if (launchTag) launchTag.setAttribute('appid', WECHAT_OPEN_APP_ID);
 			bindWeChatLaunchTagEvents();
-			if (isWeChatInAppBrowser()) {
-				document.body.classList.add('is-wechat');
+			if (shouldInitWeChatJssdkOnLoad()) {
+				if (isWeChatInAppBrowser()) document.body.classList.add('is-wechat');
+				if (isWxPcBrowser() && (isWxForceDebug() || isWxPcAutoDebugHost())) {
+					document.body.classList.add('wx-pc-debug');
+				}
 				scheduleWeChatJssdkBootstrap();
+			}
+			if (isWeChatInAppBrowser()) {
 				var openBtnWx = document.getElementById('openApp');
 				if (openBtnWx) {
 					openBtnWx.addEventListener('click', function () {