微信小程序web-view 嵌入h5页面

web-view | 微信开放文档

具体可以参考微信开放文档中web-view

微信小程序

wxml

<web-view src="{{kocUrl}}"></web-view>

js


const app = getApp();
Page({

    /**
     * 页面的初始数据
     */
    data: {
        kocUrl: ''
    },
   

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        wx.hideShareMenu();
        var that = this,
        //url 需要跳转的路径
        url = options.url;
       //iswechat是用来做判断小程序环境的(由于刚进小程序用微信的sdk拿不到是否是小程序环境,所以带了个参数做处理)
            that.setData({
                kocUrl:`https://xxxxxxx.cn/${url}?token=${token}&iswechat=true`
            })
        
        console.log(this.data.kocUrl);
    },
    
})

h5 

1、在h5 项目html中引入微信的cdn文件

<body>
  <div id="app">
  </div>
  <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
  <script type="module" src="/src/main.ts"></script>
</body>

2、使用weixin-js-sdk


npm install weixin-js-sdk
//在当前页面引入
import wx from "weixin-js-sdk";

封装一个方法,在所需要判断的地方引入以下方法

传true则返回是否为小程序环境,不传则直接跳回小程序我的页面

   //是否为小程序环境并返回原始小程序
export function isMiniprogram(flag){
  // flag = true 代表需要返回当前是否是小程序环境 否则就是直接跳转回小程序
  let smallPro=false
  wx.miniProgram.getEnv((res) => {
    // console.log(res.miniProgram) // true
    if (res.miniprogram) {
      smallPro = true
    } else {
      smallPro = false
    }
  })
  if(smallPro && !flag){
    //miniUrl可以为你想返回的小程序任何页面
    let miniUrl='/pages/personal/mine/mine'
    wx.miniProgram.redirectTo({
      url: miniUrl,//跳转回小程序的页面
      success: function(){
        console.log('success')
      },
      fail: function(){
        console.log('跳转回小程序的页面fail');
      },
    });
  }
  return smallPro //输出的是否为小程序环境
}

遇到一个问题,由于做处理的时候需要兼容h5登入正常使用

是h5环境 h5的公共头部显示,是小程序环境则隐藏

使用sdk 或者cdn都不能在刚进入环境拿到是否为小程序环境 打印为undefined

所以从web-view跳入h5是携带了参数 在路由守卫中做了处理

import router from "./router";
import { setCookie } from './utils/cookieUtils'

router.beforeEach((to, from, next) => {
  if (to.meta.title ){
      document.title=to.meta.title
    } else {
      document.title='xxx'
    }
    // 如果是微信小程序跳转过来的,获取到token设置一下
    if (to.query && to.query.token) {
      setCookie('token', to.query.token)
    }
    if(to.query&&to.query.iswechat){
      sessionStorage.setItem('iswechat','true')
    }
  next()
})

如果有更好的方法可以取到是否为小程序环境的值,多多交流哦~

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值