小程序webView实现小程序内嵌H5页面的全过程
const toWebFun = (type = 'navigateTo') => {
return function (url, isRequireToken) {
const params = queryToObj(url); //
const token = Taro.getStorageSync(ConstantList.TOKEN); //
const host = Config.HOST_H5; // H5固定域名
const TaroNavigate = type === 'redirectTo' ? Taro.redirectTo : Taro.navigateTo;
let path = '';
let tokenKey = '?token=';
let ismini = '?ismini=1'; // 个人定义代表小程序内打开H5 方便区分
// 带有https链接情况 就不使用host固定域名
if (url.includes('https://')) {
path = `/subPages/webView/index?weburl=${encodeURIComponent(
`${url}${url.indexOf('?') > -1 ? '&token=' : '?token='}${token}&ismini=1`,
)}`;
TaroNavigate({
url: path,
});
return;
}
// 如果连接本身带有?后面参数 则不要覆盖 而是追加
if (url.indexOf('?') !== -1) {
tokenKey = '&token=';
ismini = '&ismini=1';
}
if (isRequireToken) { // 是否需要登录的页面
if (token) {
path = `/subPages/webView/index?weburl=${encodeURIComponent(`${host}#${url + tokenKey + token}${ismini}`)} `;
} else {
// 需要登录 有没有token的情况 先跳转登录 然后 带上url登陆后继续执行跳转操作 又会继续执行toWebFun 函数
Taro.navigateTo({
url: `/subPages/login/index?redirectTo=${url}`,
});
return;
}
} else {
// 无需token
path = `/subPages/webView/index?weburl=${encodeURIComponent(`${host}#${url}${ismini}`)}`;
}
TaroNavigate({
url: path,
});
};
};
export const navigateToWeb = toWebFun();