|
@@ -1175,8 +1175,50 @@
|
|
|
return /MicroMessenger/i.test(navigator.userAgent || '');
|
|
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() {
|
|
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() {
|
|
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);
|
|
return Promise.resolve(false);
|
|
|
}
|
|
}
|
|
|
- if (wxJssdkInitPromise) return wxJssdkInitPromise;
|
|
|
|
|
|
|
+ if (isWxPcBrowser()) {
|
|
|
|
|
+ console.warn(
|
|
|
|
|
+ '[wx] PC:请求 getWxConfig' + (fromUserClick ? '(按钮)' : '(进页)')
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ if (wxJssdkInitPromise && !fromUserClick) return wxJssdkInitPromise;
|
|
|
|
|
|
|
|
wxConfigSignRetriedBaseUrl = false;
|
|
wxConfigSignRetriedBaseUrl = false;
|
|
|
wxInitLastError = '';
|
|
wxInitLastError = '';
|
|
|
var signPageUrl = getWxConfigSignUrl();
|
|
var signPageUrl = getWxConfigSignUrl();
|
|
|
|
|
|
|
|
- if (typeof wx === 'undefined') {
|
|
|
|
|
- setWxInitError('jweixin.js 未加载,无法请求 getWxConfig');
|
|
|
|
|
- console.warn('[wx] 未调用 getWxConfig:wx 对象不存在');
|
|
|
|
|
- return Promise.resolve(false);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
bindWeChatLaunchTagEvents();
|
|
bindWeChatLaunchTagEvents();
|
|
|
wxJssdkInitPromise = fetchWeChatJssdkSign(signPageUrl)
|
|
wxJssdkInitPromise = fetchWeChatJssdkSign(signPageUrl)
|
|
|
.then(function (sign) {
|
|
.then(function (sign) {
|
|
@@ -1481,6 +1522,14 @@
|
|
|
'后端 appId=' + sign.appId + ',应为服务号 ' + WECHAT_MP_APP_ID
|
|
'后端 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) {
|
|
return applyWxConfig(sign, signPageUrl).then(function (ok) {
|
|
|
if (!ok && !wxInitLastError) {
|
|
if (!ok && !wxInitLastError) {
|
|
|
setWxInitError('wx.config 失败,可加 ?wxDebug=1');
|
|
setWxInitError('wx.config 失败,可加 ?wxDebug=1');
|
|
@@ -1502,7 +1551,7 @@
|
|
|
|
|
|
|
|
/** 进页即尝试拉签名;jweixin 晚到时自动重试 */
|
|
/** 进页即尝试拉签名;jweixin 晚到时自动重试 */
|
|
|
function scheduleWeChatJssdkBootstrap() {
|
|
function scheduleWeChatJssdkBootstrap() {
|
|
|
- if (!isWeChatInAppBrowser()) return;
|
|
|
|
|
|
|
+ if (!shouldInitWeChatJssdkOnLoad()) return;
|
|
|
var attempts = 0;
|
|
var attempts = 0;
|
|
|
function tick() {
|
|
function tick() {
|
|
|
attempts += 1;
|
|
attempts += 1;
|
|
@@ -1561,10 +1610,37 @@
|
|
|
* 有 plus:检测 App 是否安装后 openURL;深链形如 shopro://{APP_UNI_STORE_PATH}?…
|
|
* 有 plus:检测 App 是否安装后 openURL;深链形如 shopro://{APP_UNI_STORE_PATH}?…
|
|
|
* 系统浏览器:唤起 scheme;微信内常拦截 scheme,需「在浏览器打开」。
|
|
* 系统浏览器:唤起 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() {
|
|
function tryOpenHBuilderApp() {
|
|
|
/* 微信内须直接点击 wx-open-launch-app,scheme 会被拦截 */
|
|
/* 微信内须直接点击 wx-open-launch-app,scheme 会被拦截 */
|
|
|
if (isWeChatInAppBrowser()) return;
|
|
if (isWeChatInAppBrowser()) return;
|
|
|
|
|
|
|
|
|
|
+ tryFetchWxConfigOnPcClick().then(function () {
|
|
|
|
|
+ if (isWxConfigOnClickDebug() && !isWxForceDebug() && !isWxPcAutoDebugHost()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ tryOpenHBuilderAppViaScheme();
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function tryOpenHBuilderAppViaScheme() {
|
|
|
showFabToast('正在打开 U店在哪…');
|
|
showFabToast('正在打开 U店在哪…');
|
|
|
var deepLink = buildAppDeepLink();
|
|
var deepLink = buildAppDeepLink();
|
|
|
|
|
|
|
@@ -2769,9 +2845,14 @@
|
|
|
var launchTag = document.getElementById('launch-btn');
|
|
var launchTag = document.getElementById('launch-btn');
|
|
|
if (launchTag) launchTag.setAttribute('appid', WECHAT_OPEN_APP_ID);
|
|
if (launchTag) launchTag.setAttribute('appid', WECHAT_OPEN_APP_ID);
|
|
|
bindWeChatLaunchTagEvents();
|
|
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();
|
|
scheduleWeChatJssdkBootstrap();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (isWeChatInAppBrowser()) {
|
|
|
var openBtnWx = document.getElementById('openApp');
|
|
var openBtnWx = document.getElementById('openApp');
|
|
|
if (openBtnWx) {
|
|
if (openBtnWx) {
|
|
|
openBtnWx.addEventListener('click', function () {
|
|
openBtnWx.addEventListener('click', function () {
|