declare global {
interface Window {
wx?: {
miniProgram: {
navigateTo: (options: {
url: string;
success?: () => void;
fail?: (error: any) => void;
}) => void;
redirectTo: (options: {
url: string;
success?: () => void;
fail?: (error: any) => void;
}) => void;
};
};
__wxjs_environment?: string;
}
}
export const isAndroid = () => {
return /android/i.test(navigator.userAgent.toLowerCase());
};
export const isInMiniProgram = () => {
try {
return window.wx && typeof window.wx.miniProgram !== 'undefined';
} catch (e) {
return false;
}
};
export const backToMiniProgram = (url: string, query: any) => {
const queryString = Object.entries(query)
.map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
.join('&');
const fullUrl = queryString ? `${url}?${queryString}` : url;
if (isInMiniProgram()) {
if (isAndroid()) {
console.log('安卓设备特殊处理:延迟500ms执行跳转');
setTimeout(() => {
try {
if (window.wx?.miniProgram) {
window.wx.miniProgram.navigateTo({
url: fullUrl,
success: () => {
console.log('跳转成功');
},
fail: (error) => {
console.error('跳转失败:', error);
window.wx?.miniProgram.redirectTo({
url: fullUrl,
fail: (redirectError) => {
console.error('redirectTo 也失败:', redirectError);
alert('跳转失败,请稍后重试');
}
});
}
});
} else {
console.error('wx.miniProgram 未定义');
alert('当前环境不支持跳转');
}
} catch (error) {
console.error('跳转过程发生错误:', error);
alert('跳转失败,请稍后重试');
}
}, 500);
} else {
try {
window.wx?.miniProgram.navigateTo({
url: fullUrl,
success: () => {
console.log('跳转成功');
},
fail: (error) => {
console.error('跳转失败:', error);
alert('跳转失败,请稍后重试');
}
});
} catch (error) {
console.error('跳转过程发生错误:', error);
alert('跳转失败,请稍后重试');
}
}
}
else if (window.parent) {
try {
window.parent.postMessage({
type: 'navigateTo',
data: {
url: fullUrl
}
}, '*');
} catch (error) {
console.error('跳转失败:', error);
alert('跳转失败,请稍后重试');
}
} else {
alert("当前环境不支持跳转");
}
};
const handleOrderPay = () => {
submitOrder({
productId: selectedSku?.productId,
})
.then((res) => {
backToMiniProgram("/pages/sub-order-detail/order-pay/order-pay", {
scene: res.data.orderNo,
payNow: true,
});
})
.catch((err) => {
Toast.show({
content: "下单失败",
icon: "fail",
});
});
};
ios真机调试都可以正常,开发者工具也可以正常跳转,就是安卓手机真机调试不行,更换了两个手机测试了都不能跳转,直接提示‘下单失败’
路径最前面加多一个 / 试试
window.wx.miniProgram.navigateTo({
url:"/pages/sub-order-detail/order-pay/order-pay"});
直接调可以吗?