美文网首页
H5微信分享

H5微信分享

作者: 青城墨阕 | 来源:发表于2020-07-20 16:14 被阅读0次
    父组件调用
    // 分享
    sharePage() {
        let me = this;
        this.shareConfig = {
            url: 'http://www.baidu.com',
            title: '测试',
            desc: 'desc-----',
            img: 'https://www.baidu.com/img/dong_54209c0ff3da32eecc31f340c08a18f6.gif',
            type: 2
        };
        // 浏览器默认分享优先级最高
        if (window.navigator.share === undefined) {
            this.$refs.shareInfo.shareShow();
        }
        else {
            window.navigator.share({
                title: this.config.title,
                text: this.config.desc,
                url: this.config.url
            }).then(() => {
                me.$refs.shareInfo.shareShow();
            }).catch(err => {
                console.log(err);
            });
        }
    }
    
    子组件
    <template>
    <section>
        <nut-actionsheet :is-visible="isVisible" 
            @close="shareShow">
            <div slot="custom" class="custom-wrap">
                <div class="share-l" @click="handleShare(1)">朋友圈</div>
                <div class="share-r" @click="handleShare(8)">好友</div>
            </div>
        </nut-actionsheet>
    </section>
    </template>
    <script>
    
    import commonjs from './common';
    import jwx from 'weixin-js-sdk';
    
    export default {
        data() {
            return {
                isVisible: false,
                qqBridgeLoaded: false
            };
        },
        props: [
            'config'
        ],
        mixins: [commonjs],
        components: {
            
        },
        created() {
            let UA = navigator.appVersion;
    
            /**
             * 是否是 UC 浏览器
             */
            this.uc = UA.split('UCBrowser/').length > 1 ? 1 : 0;
    
            /**
             * 判断 qq 浏览器
             * 然而qq浏览器分高低版本
             * 2 代表高版本
             * 1 代表低版本
             */
            this.qq = UA.split('MQQBrowser/').length > 1 ? 2 : 0;
    
            /**
             * 是否是微信
             */
            this.wx = /micromessenger/i.test(UA);
    
            /**
             * 浏览器版本
             */
            this.qqVs = this.qq ? parseFloat(UA.split('MQQBrowser/')[1]) : 0;
            this.ucVs = this.uc ? parseFloat(UA.split('UCBrowser/')[1]) : 0;
    
            this.os = this.osType();
    
        },
        methods: {
            shareShow() {
                this.isVisible = !this.isVisible;
                if (this.isVisible) {
                    this.initwx(this.config);
                    this.loadqqApi(() => {
                        this.qqBridgeLoaded = true;
                    });
                }
            },
            osType() {
                let ua = navigator.userAgent;
    
                if (/iphone|ipod/i.test(ua)) {
                    return 1;
                } else if (/android/i.test(ua)) {
                    return 2;
                } else {
                    return 0;
                }
            },
            initwx(config) {
                this.$axios({
                    url: '/bizcrm/prism/followUpRecord',
                    // url: '/bizcrm/prism/wechatShare',
                    method: 'POST',
                    data: {
                        params: {
                            url: config.url
                        }
                    }
                }).then(res => {
                    let self = this;
                    self.readFlag = false;
                    if (+res.code === 0) {
                        const jsApiList = ['onMenuShareTimeline', 'onMenuShareAppMessage'];
                        jwx.config({
                            debug: true,
                            appId: 'wxd981cc94fb1a8d81',
                            timestamp: res.data.timeStamp,
                            nonceStr: res.data.nonceStr,
                            accessToken: res.data.accessToken,
                            signature: res.data.signature,
                            jsApiList: jsApiList
                        });
                        jwx.ready(() => {
                            self.readFlag = true;
                        });
    
                        jwx.error(function (res) {
                            self.readFlag = false;
                            console.error(res);
                        });
                    }
                }).catch(res => {
                });
            },
            handleShare(type) {
                let me = this;
                if (typeof type !== 'undefined') {
                    this.config.type = type;
                }
    
                try {
                    if (this.uc) {
                        this.ucShare(this.config);
                        me.isVisible = false;
                    }
                    else if (this.qq && !this.wx) {
                        this.qqShare(this.config);
                        me.isVisible = false;
                    }
                    else if (this.wx) {
                        this.wxShare(this.config);
                    }
                    else {
                        // if (window.navigator.share === undefined) {
                            this.wxShare(this.config);
                        // }
                        // else { // 浏览器默认分享
                        //     window.navigator.share({
                        //         title: this.config.title,
                        //         text: this.config.desc,
                        //         url: this.config.url
                        //     }).then(() => {
                        //         me.isVisible = false;
                        //     }).catch(err => {
                        //         console.log(err);
                        //     });
                        // }
                    }
                }
                catch (e) {}
            },
            // UC浏览器分享
            ucShare(config) {
                // 关于platform
                // ios: kWeixin || kWeixinFriend;
                // android: WechatFriends || WechatTimeline
                // uc 分享会直接使用截图
    
                let platform = '';
                let shareInfo = null;
    
                // 指定了分享类型
                if (config.type) {
                    if (+this.os === 2) {
                        platform = +config.type === 1 ? 'WechatTimeline' : 'WechatFriends';
                    } else if (+this.os === 1) {
                        platform = +config.type === 1 ? 'kWeixinFriend' : 'kWeixin';
                    }
                }
    
                shareInfo = [config.title, config.desc, config.url, platform, '', '', ''];
    
                // android
                if (window.ucweb) {
                    window.ucweb.startRequest && window.ucweb.startRequest('shell.page_share', shareInfo);
                    return;
                }
    
                if (window.ucbrowser) {
                    window.ucbrowser.web_share && window.ucbrowser.web_share.apply(null, shareInfo);
                    return;
                }
            },
            // qq 浏览器分享函数
            qqShare(config) {
                let type = config.type;
    
                // 微信好友 1, 微信朋友圈 8
                type = type ? ((type === 1) ? 8 : 1) : '';
    
                let share = function () {
                    let shareInfo = {
                        url: config.url,
                        title: config.title,
                        description: config.desc,
                        'img_url': config.img,
                        'img_title': config.title,
                        'to_app': type,
                        'cus_txt': ''
                    };
    
                    if (window.browser) {
                        window.browser.app && window.browser.app.share(shareInfo);
                    } else if (window.qb) {
                        window.qb.share && window.qb.share(shareInfo);
                    }
                };
    
                if (this.qqBridgeLoaded) {
                    share();
                } else {
                    this.loadqqApi(share);
                }
            },
    
            // qq浏览器下面 根据不同版本 加载对应的bridge
            loadqqApi(cb) {
                // qq == 0
                if (!this.qq) {
                    return cb && cb();
                }
    
                let script = document.createElement('script');
                script.src = (+this.qq === 1) ? '//3gimg.qq.com/html5/js/qb.js' : '//jsapi.qq.com/get?api=app.share';
    
                /**
                 * 需要等加载过 qq 的 bridge 脚本之后
                 * 再去初始化分享组件
                 */
                script.onload = function () {
                    cb && cb();
                };
    
                document.body.appendChild(script);
            },
            // 微信浏览器分享
            wxShare(config) {
                let me = this;
                if (+config.type === 8) { // 好友
                    jwx.onMenuShareAppMessage({
                        title: config.title, // 分享标题
                        desc: config.desc, // 分享描述
                        link: config.url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: config.img, // 分享图标
                        type: 'link', // 分享类型,music、video或link,不填默认为link
                        dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                        success: () => {
                            me.isVisible = false;
                        }
                    });
                }
                else { // 朋友圈
                    jwx.onMenuShareTimeline({
                        title: config.title, // 分享标题
                        desc: config.desc, // 分享描述
                        link: config.url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                        imgUrl: config.img, // 分享图标
                        type: 'link', // 分享类型,music、video或link,不填默认为link
                        dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                        success: () => {
                            me.isVisible = false;
                        }
                    });
                }
            }
        },
    
        destroyed() {
        }
    };
    </script>
    <style lang='less' scoped>
    .custom-wrap {
        width: 100%;
        height: 660px;
        display: flex;
        justify-items: flex-start;
        align-content: center;
        font-size: 42px;
        .share-l {
            width: 50%;
            height: 100%;
            background-image: url(../../assets/share.png);
            background-repeat: no-repeat;
            background-position: 50% 180px;
            background-size: auto 150px;
            padding-top: 350px;
            text-align: center;
        }
        .share-r {
            width: 50%;
            height: 100%;
            background-image: url(../../assets/share.png);
            background-repeat: no-repeat;
            background-position: 50% 180px;
            background-size: auto 150px;
            padding-top: 350px;
            text-align: center;
        }
    }
    </style>
    
    

    相关文章

      网友评论

          本文标题:H5微信分享

          本文链接:https://www.haomeiwen.com/subject/ayrykktx.html