uniapp开发小程序跳转兼容普通页面、tabBar页面、重定向
2023-04-10 本文已影响0人
轩轩小王子
首先,小程序的跳转的跳转分为三类:分别是
- uni.navigateTo
保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面。 - uni.switchTab
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 - uni.redirectTo
关闭当前页面,跳转到应用内的某个页面。
这些我想开发过小程序的都不陌生,但是我这里进行了一层封装,一个方法可以兼容以上三种形式的跳转
// 是否是h5链接
isH5Link(value) {
const urlReg = /(http|https):\/\/([\w.]+\/?)\S*/;
return urlReg.test(value);
},
// 是否是小程序内页面链接
isMiniPageLink(value) {
if (value.substr(0, 4) === 'page' || value.substr(0, 5) === '/page') {
return true;
}
return false;
},
// 页面跳转,支持小程序内页面和h5链接 linkType: ordinary: uni.navigateTo 其他为uni.redirectTo
pageJump(linkUrl, linkType = 'ordinary') {
if (!linkUrl) {
return ;
}
// 调用本页面的其他方法
if (utils.isH5Link(linkUrl)) {
if (linkType === 'ordinary') {
uni.navigateTo({ // 在本js内可以直接调用uni.navigateTo
url: '../webView/webView?froms='+ encodeURIComponent(linkUrl)
});
} else {
uni.redirectTo({
url: '../webView/webView?froms='+ encodeURIComponent(linkUrl)
});
}
} else if (utils.isMiniPageLink(linkUrl)) {
let hyperlink = '';
// 如果不是以/开头,前端补/
if (linkUrl.substr(0, 1) === 'p') {
hyperlink = '/' + linkUrl;
} else {
hyperlink = linkUrl;
}
if (linkType === 'ordinary') {
uni.navigateTo(
{
url: hyperlink,
// 比较巧妙的处理
fail: function() {
// 支付宝没有走fail
uni.switchTab({
// 兼容跳tab页面的情况
url: hyperlink
});
}
}
)
} else {
uni.redirectTo({
url: hyperlink
})
}
}
}