微信二次分享 微信浏览器打开页面时 IOS隐藏复制按钮和自定义菜单按钮时失效问题(特殊情况下)

 背景

vue项目-开发h5   防止个人信息隐私泄漏

    要求html页面开发微信二次分享  只能发送给个人 ,隐藏所有保护类操作,自定义传播类操作, 复制链接/原网页等等

    微信开发API,保护类,传播类请查看目录3

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

解决方案:vue项目引入wx.js 操作直接npm安装  

    安装 npm install wx-js-sdk

遇到问题:按api所说 隐藏不需要的按钮 (微信浏览器原生js很多已经被弃用!)

使用批量隐藏功能按钮接口:

 wx.hideMenuItems({
    menuList: ["menuItem:editTag","menuItem:delete","menuItem:refresh","menuItem:copyUrl",
    "menuItem:share:qq","menuItem:share:weiboApp","menuItem:favorite",            "menuItem:share:timeline","menuItem:openWithQQBrowser","menuItem:openWithSafari",
    "menuItem:share:email",              "menuItem:originPage","menuItem:share:facebook","menuItem:share:QZone","menuItem:share:brand"]
})

结果:使用后微信开发者工具显示正常,安卓正常,

特殊情况下:

    ios出现问题 :微信浏览器打开分享的网页时,

    谨记--当网页没有加载完成时,直接点击右上角(三点)菜单按钮,弹出的菜单按钮,此时显示全部,安卓会在页面加载完,   按钮消失,正常!

    但 ios,不会消失,是显示所有操作,自定义的隐藏失效,但是当你关闭再次打开菜单按钮,又回再次正常!

无效方案:我尝试先隐藏菜单按钮页面加载后在显示,失败 !或者在路由前置函数中就开始请求签名包,在执行完微信分享配置后在显示页面,失败!

不断尝试,最终解决方案:

    先隐藏到所有按钮操作,在主动显示出来你要的按钮操作。代码如下:

//

完成后效果图:

微信二次分享 微信浏览器打开页面时 IOS隐藏复制按钮和自定义菜单按钮时失效问题(特殊情况下)_第1张图片

 

完成代码:此函数放在vue工具类中

export function  wxShare  (option){
    var timestamp = Date.parse(new Date()) + "";
    var url = location.href.split('#')[0];
    var order_sn = option.order_sn;
   /* return axios.get*/
    return request.get(url,{ timestamp, url,order_sn})
        .then(function (data) {
            wx.config({
                debug: false, // 开启调试模式
                appId: data.data.appId, // 必填,公众号的唯一标识
                timestamp: data.data.timestamp, // 必填,生成签名的时间戳
                nonceStr: data.data.nonceStr, // 必填,生成签名的随机串
                signature: data.data.signature, // 必填,签名,见附录1
                jsApiList: ['hideMenuItems','updateAppMessageShareData','hideAllNonBaseMenuItem','showMenuItems']
                // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            });
            // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
     /*       wx.hideMenuItems({
                menuList: ["menuItem:editTag","menuItem:delete","menuItem:refresh","menuItem:copyUrl",
                    "menuItem:share:qq","menuItem:share:weiboApp","menuItem:favorite",
                    "menuItem:share:timeline","menuItem:openWithQQBrowser","menuItem:openWithSafari","menuItem:share:email",
                    "menuItem:originPage","menuItem:share:facebook","menuItem:share:QZone","menuItem:share:brand"]
            });*/
            wx.ready(function () {
                wx.hideAllNonBaseMenuItem();
                wx.updateAppMessageShareData({
                    title:  option.title, // 分享标题
                    desc: option.desc, // 分享描述
                    link:data.data.share_url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                    imgUrl: share_log, // 分享图标
                    success: function () {
                        // 设置成功
                        console.info("weixin qq")
                    },
                    cancel: function () {
                        // 用户取消分享后执行的回调函数
                        console.info("weixinqq用户取消分享")
                    }
                });
                wx.showMenuItems({
                    menuList: ["menuItem:share:appMessage"] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
                });
            });
            wx.error(function(res){
                wx.hideAllNonBaseMenuItem();
                console.info(res)
                // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
            });
        }).catch(function (error) {
            wx.hideAllNonBaseMenuItem();
        });
}

如有更好的解决方案,欢迎大佬来指导!

你可能感兴趣的:(vue,前端,微信二次分享,vue微信分享,微信分享,ios,自定义微信分享按钮)