小程序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();