Post

微信jssdk在企业微信中失效

前段时候,开发了一个H5页面,由于老板要求需要自定义分享链接样式(也就是分享出去是卡片样式)。于是使用了jssdk;

jssdk官方链接(本文不是讲的如何使用这个sdk): https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#1

最近,老板要求在企业微信中打开这个h5页面后, 不能使用复制链接功能。主要是想避免销售直接粘贴后就发给客户,让销售只能走h5的分享进行发送。

企业微信其实和微信都是使用的一个sdk来控制h5的选项功能,但是这里有个坑:

下面代码可以正常使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: 'wx764b87e48e670f08', // 必填,公众号的唯一标识
            timestamp: res.timestamp, // 必填,生成签名的时间戳
            nonceStr: res.nonceStr, // 必填,生成签名的随机串
            signature: res.signature ,// 必填,签名
            jsApiList: [
                'updateAppMessageShareData',
                'updateTimelineShareData',
                'hideMenuItems'

            ]
        });

        // 通过error接口处理失败验证
        wx.error(function (errres) {
            console.info("失败:", errres);
        });

        wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
            var sharedata = {
                title: '分享标题', // 分享标题
                desc: `分享描述`, // 分享描述
                link: res.url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: location.protocol + "//" + location.host+ "/logo.png", // 分享图标
                success: function () {
                    // 设置成功
                }
            }
            // 记得判断,企业微信和微信暴露的函数不一样的,可能企业微信没有而微信有
            if(wx.updateAppMessageShareData) {
                wx.updateAppMessageShareData(sharedata);
            }

            // 记得判断,企业微信和微信暴露的函数不一样的,可能企业微信没有而微信有
            if(wx.updateTimelineShareData) {
                wx.updateTimelineShareData(sharedata);
            }

            // 记得判断,企业微信和微信暴露的函数不一样的,可能企业微信没有而微信有
            if(wx.hideMenuItems) {
                wx.hideMenuItems({// 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
                    menuList: [
                        "menuItem:copyUrl",
                        "menuItem:favorite",
                        "menuItem:share:timeline",
                        "menuItem:share:qq",
                        "menuItem:share:weiboApp",
                        "menuItem:share:facebook",
                        "menuItem:share:QZone",
                        "menuItem:editTag",
                        "menuItem:originPage"
                    ]
                });
            }

        });

一般jssdk开发时,在config中配置函数,再在ready中进行函数处理,这也是微信官方文档要求的流程。

这里的坑在于,某些函数在微信浏览器中是支持的,在企业微信浏览器中是不支持的。比如hideMenuItems函数再两个中都支持,但是注册卡片分享的updateTimelineShareData和updateAppMessageShareData函数, 这两只在微信中支持。所以函数那里需要使用if(wx.updateAppMessageShareData)进行判断,不然不支持的就会报错影响后续业务逻辑了。

所有可以隐藏的参数见文档:18 附录3-所有菜单项列表

This post is licensed under CC BY 4.0 by the author.