使用微信开放标签<wx-open-launch-weapp>的踩坑日记

最近在完成H5跳转小程序需求时,使用到了微信官方退出的开放标签<wx-open-launch-weapp>,来谈一谈使用的心得和不足。

1、适用环境

微信版本要求为:7.0.12及以上。 系统版本要求为:iOS 10.3及以上、Android 5.0及以上

2、接入微信的JS-SDK

按微信JS-SDK要求绑定安全域,并通过config接口注入权限验证配置

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [], // 必填,需要使用的JS接口列表
  openTagList: [] // 可选,需要使用的开放标签列表,例如['wx-open-launch-app']
});

这里附录微信官方教程微信开放文档

贴个我用的方法

    /**
     * H5跳转小程序
     */
    registerWXJumlSDK (that, callback) {
        const jsApiList = [
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'closeWindow',
            'showMenuItems',
            'hideOptionMenu',
            'showOptionMenu',
            'hideAllNonBaseMenuItem',
            'onMenuShareQQ',
            'chooseWXPay',
        ]
        // console.log(Vue.$api);
        const _this = that
        const openTagList = ['wx-open-launch-weapp']
        let weapp = {
            originid: '', // 所需跳转的小程序原始id,即小程序对应的以gh_开头的id
            path: '', // 所需跳转的小程序内页面路径及参数
        }
        
        let urls = ""
        let u = navigator.userAgent
        if (/ipad|iphone|mac/i.test(u)) {
            urls = _this.$store.state.configUrl.split("#")[0]
        } else {
            urls = encodeURIComponent(location.href.split("#")[0])
        }
        // 签名算法的接口
        _this.$api.jsTicket({ url: urls }).then((res) => {
            var resData = res.content
            if (resData.resultCode == 1) {
                wx.config({
                    appId: '', // 必填,公众号的唯一标识
                    timestamp: '', // 必填,生成签名的时间戳
                    nonceStr: '', // 必填,生成签名的随机串
                    signature: '', // 必填,签名,见附录1
                    debug: false,
                    jsApiList: '',
                    openTagList: openTagList
                })
                callback(weapp)
                // return weapp 
            }
        })
        .catch((e) => {})
    },

在微信开发者工具内打开你的页面如果显示

{errMsg: "config:ok”}

就说明你已经介入wx的js-sdk成功了

3.使用开放标签(vue)

贴个最简单的应用

<wx-open-launch-weapp
    id="launch-weapp1"
    username="xxxxxx"
    path="xxxxxx"
    @launch="onLaunch"
    @error="onError"
>
    <script type="text/wxtag-template">
        <div style="font-size: 14px;margin-top: 10px;text-align: center;">打开小程序</div>
    </script>
</wx-open-launch-weapp>

坑的地方来了: 你会发现在微信开发者工具中没有显示还报错

在微信开发者工具中没有显示是因为微信开发者工具还是无法支持微信开放标签的调试功能,只能在手机上调试并且是在加了微信安全域名的服务器环境下调试( ̄︶ ̄)

报错是在提示你没有在vue中注册过改组件,你只需要在main.js中写上下面一句代码就可以了

Vue.config.ignoredElements = ['wx-open-launch-weapp']

除了这点外还有以下几个坑点

  1. 不能用js来模拟点击,有了局限性
  2. 样式无法写在外面中,只能在script标签内内链写或者行内样式
  3. 无论是内链还是行内 都不支持rem
  4. 不会继承样式
  5. 如果开发标签内需要使用图片,不能用本地图片,得用外网可以访问的图片,要不然会不显示
4.动态渲染

经过实验发现是可以动态渲染的

<div v-for="(item,index) in list" :key="index" v-html="renderDom(item)"></div>


// 动态渲染微信开发标签 跳转小程序
renderDom (item) {
  let script = document.createElement('script')  
  script.type = 'text/wxtag-template'
  let image = item.imgUrl  
  script.text = `<div style="height:100%;width:100%;text-align:center;"> <img src="${image}" width="46px" height="46px"/><p style="color: #333;font-size: 12px;">${item.name}</p></div>` 
  let html = `<wx-open-launch-weapp style="width:100%;display:block;height:100%;" username="小程序原始id"path="小程序页面路径和参数">${script.outerHTML}</wx-open-launch-weapp>`
  return html
}

这样就实现了动态渲染

最后在贴个官方的适用用例

<wx-open-launch-weapp
  id="launch-btn"
  username="gh_xxxxxxxx"
  path="pages/home/index.html?user=123&action=abc"
>
  <template>
    <style>.btn { padding: 12px }</style>
    <button class="btn">打开小程序</button>
  </template>
</wx-open-launch-weapp>
<script>
  var btn = document.getElementById('launch-btn');
  btn.addEventListener('launch', function (e) {
    console.log('success');
  });
  btn.addEventListener('error', function (e) {
    console.log('fail', e.detail);
  });
</script>
在 Vue 中使用 `<wx-open-launch-weapp>` 组件时,你需要按照以下步骤进行操作: 1. 首先,确保已经在项目中引入了微信小程序的相关 SDK。 2. 在 Vue 组件中,可以直接使用 `wx-open-launch-weapp` 标签来包裹需要触发打开小程序的内容。 ```html <template> <div> <wx-open-launch-weapp :appid="appId" :path="path" :extra-data="extraData"> <!-- 包裹需要触发打开小程序的内容 --> <button>打开小程序</button> </wx-open-launch-weapp> </div> </template> ``` 3. 在 Vue 组件的 `data` 中定义必要的参数,例如 `appId`、`path` 和 `extraData`: ```javascript <script> export default { data() { return { appId: 'yourAppId', // 小程序 AppID path: 'pages/index', // 小程序页面路径 extraData: {} // 打开小程序时传递的额外参数 } } } </script> ``` 4. 根据实际需求,可以对 `<wx-open-launch-weapp>` 组件进行自定义配置,例如可以添加 `bindsuccess` 和 `bindfail` 事件来处理打开小程序成功和失败的情况。 ```html <wx-open-launch-weapp :appid="appId" :path="path" :extra-data="extraData" @bindsuccess="onLaunchSuccess" @bindfail="onLaunchFail" > <!-- 包裹需要触发打开小程序的内容 --> <button>打开小程序</button> </wx-open-launch-weapp> ``` ```javascript <script> export default { // 其他代码... methods: { onLaunchSuccess() { // 打开小程序成功时的回调 console.log('小程序打开成功'); }, onLaunchFail(e) { // 打开小程序失败时的回调 console.log('小程序打开失败', e); } } } </script> ``` 以上是在 Vue 中使用 `<wx-open-launch-weapp>` 组件的基本方法,根据自己的实际需求进行配置即可。注意,还需要在微信小程序后台配置好相应的参数,例如 AppID 和页面路径等。
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值