天天看點

JS加載微信SDK—>跳轉小程式的方法

import loadScript from './loader.js'

const SDK_URL = '//res.wx.qq.com/open/js/jweixin-1.3.2.js' //小程式web-view推薦使用1.3.2版本


let loaded = 'init'
// 加載微信sdk
export function loadWechatSDK() {
	if (loaded === 'loaded') {
		return Promise.resolve()
	} else if(loaded === 'init') {
		loaded = 'loading'
		return loadScript(SDK_URL, { crossOrigin: false }).then(() => {
			loaded = 'loaded'
		})
	}
}

// window.__wxjs_environment === "miniprogram" 
export function jumpMiniProgram(url) {
	console.log(window.wx);
	if (window.wx) {
		wx.miniProgram.navigateTo({ url });
	} else {
		loadWechatSDK().then(() => {
			wx.miniProgram.navigateTo({ url });
		});
	}
}

// h5跳轉到中間頁的方式
export const jumpToMediumPage = (fn,hasParameter) => {
  console.log('href',window.location.href)

  let newPath = `${window.location.href}`
  console.log('newPath',newPath);

  let splitURL = newPath.split("?")[1].split("&");
  console.log(splitURL);  

  for(var i=0;i<splitURL.length;i++){
	var searchkey="";
	if(splitURL[i].indexOf("stream=")!=-1){
	  searchkey= splitURL[i].split("stream=")[1];
	  console.log("stream",searchkey);
	}
  }

  // 允許導流
  if(searchkey) {
	console.log("允許導流");
    // 如果是小程式環境下
    if (window.__wxjs_environment === "miniprogram") {
      let url = "/pages/index/index?menuid=gongjiao67";
	  console.log(url);
      jumpMiniProgram(url);
    } 
	else {
	  // 不是小程式環境下就直接跳轉
	  console.log("不是小程式環境下");
	  // 有參函數·
	  if(hasParameter) fn(hasParameter);
	  // 無參函數
	  else fn();
      // location.href = 'https://page.xiaojukeji.com/package/wxmp-middleware/index.html?redirect=weixin%3A%2F%2Fdl%2Fbusiness%2F%3Ft%3DLAcT5JdAxPe'
    }
  }
  // 不允許導流就還走原來的函數邏輯 
  else {
	console.log("不允許導流");
	console.log("fn",fn,hasParameter);
	// 有參函數
	if(hasParameter) fn(hasParameter);
	// 無參函數
	else fn();
  }
}
           

代碼改動程度不大,直接将原來的函數邏輯作為參數傳入新方法,不改變原有函數邏輯,在jumpToMediumPage中走判斷,滿足條件走jumpToMediumPage的内部代碼,不滿足條件的直接還走原來的fn

無參傳入函數

clickSearch() {
  jumpToMediumPage(this.clickSearchDefault.bind(this))
},
clickSearchDefault(){
  ...// 一些代碼邏輯
}
           

有參數傳入

handleStationExpand(param)  {
  jumpToMediumPage(this.handleStationExpandDefault.bind(this),param);
},
handleStationExpandDefault(param) {
	...// 一些代碼邏輯
}
           

繼續閱讀