最新jsAPI 微信分享

    /**! 
     * 微信内置浏览器的Javascript API,功能包括: 
     * 
     * 1、分享到微信朋友圈 
     * 2、分享给微信好友 
     * 3、分享到腾讯微博 
     * 4、新的分享接口,包含朋友圈、好友、微博的分享(for iOS) 
     * 5、隐藏/显示右上角的菜单入口 
     * 6、隐藏/显示底部浏览器工具栏 
     * 7、获取当前的网络状态 
     * 8、调起微信客户端的图片播放组件 
     * 9、关闭公众平台Web页面 
     * 
     * @author zhaoxianlie(http://www.baidufe.com) 
     */  
    var WeixinApi = (function () {  
      
        "use strict";  
      
        /** 
         * 分享到微信朋友圈 
         * @param       {Object}    data       待分享的信息 
         * @p-config    {String}    appId      公众平台的appId(服务号可用) 
         * @p-config    {String}    imgUrl     图片地址 
         * @p-config    {String}    link       链接地址 
         * @p-config    {String}    desc       描述 
         * @p-config    {String}    title      分享的标题 
         * 
         * @param       {Object}    callbacks  相关回调方法 
         * @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false 
         * @p-config    {Function}  ready(argv)             就绪状态 
         * @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空 
         * @p-config    {Function}  cancel(resp)    取消 
         * @p-config    {Function}  fail(resp)      失败 
         * @p-config    {Function}  confirm(resp)   成功 
         * @p-config    {Function}  all(resp)       无论成功失败都会执行的回调 
         */  
        function weixinShareTimeline(data, callbacks) {  
            callbacks = callbacks || {};  
            var shareTimeline = function (theData) {  
                WeixinJSBridge.invoke('shareTimeline', {  
                    "appid":theData.appId ? theData.appId : '',  
                    "img_url":theData.imgUrl,  
                    "link":theData.link,  
                    "desc":theData.title,  
                    "title":theData.desc, // 注意这里要分享出去的内容是desc  
                    "img_width":"640",  
                    "img_height":"640"  
                }, function (resp) {  
                    switch (resp.err_msg) {  
                        // share_timeline:cancel 用户取消  
                        case 'share_timeline:cancel':  
                            callbacks.cancel && callbacks.cancel(resp);  
                            break;  
                        // share_timeline:confirm 发送成功  
                        case 'share_timeline:confirm':  
                        case 'share_timeline:ok':  
                            callbacks.confirm && callbacks.confirm(resp);  
                            break;  
                        // share_timeline:fail 发送失败  
                        case 'share_timeline:fail':  
                        default:  
                            callbacks.fail && callbacks.fail(resp);  
                            break;  
                    }  
                    // 无论成功失败都会执行的回调  
                    callbacks.all && callbacks.all(resp);  
                });  
            };  
            WeixinJSBridge.on('menu:share:timeline', function (argv) {  
                if (callbacks.async && callbacks.ready) {  
                    window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();  
                    if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {  
                        window["_wx_loadedCb_"] = new Function();  
                    }  
                    callbacks.dataLoaded = function (newData) {  
                        window["_wx_loadedCb_"](newData);  
                        shareTimeline(newData);  
                    };  
                    // 然后就绪  
                    callbacks.ready && callbacks.ready(argv);  
                } else {  
                    // 就绪状态  
                    callbacks.ready && callbacks.ready(argv);  
                    shareTimeline(data);  
                }  
            });  
        }  
      
        /** 
         * 发送给微信上的好友 
         * @param       {Object}    data       待分享的信息 
         * @p-config    {String}    appId      公众平台的appId(服务号可用) 
         * @p-config    {String}    imgUrl     图片地址 
         * @p-config    {String}    link       链接地址 
         * @p-config    {String}    desc       描述 
         * @p-config    {String}    title      分享的标题 
         * 
         * @param       {Object}    callbacks  相关回调方法 
         * @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false 
         * @p-config    {Function}  ready(argv)             就绪状态 
         * @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空 
         * @p-config    {Function}  cancel(resp)    取消 
         * @p-config    {Function}  fail(resp)      失败 
         * @p-config    {Function}  confirm(resp)   成功 
         * @p-config    {Function}  all(resp)       无论成功失败都会执行的回调 
         */  
        function weixinSendAppMessage(data, callbacks) {  
            callbacks = callbacks || {};  
            var sendAppMessage = function (theData) {  
                WeixinJSBridge.invoke('sendAppMessage', {  
                    "appid":theData.appId ? theData.appId : '',  
                    "img_url":theData.imgUrl,  
                    "link":theData.link,  
                    "desc":theData.desc,  
                    "title":theData.title,  
                    "img_width":"640",  
                    "img_height":"640"  
                }, function (resp) {  
                    switch (resp.err_msg) {  
                        // send_app_msg:cancel 用户取消  
                        case 'send_app_msg:cancel':  
                            callbacks.cancel && callbacks.cancel(resp);  
                            break;  
                        // send_app_msg:confirm 发送成功  
                        case 'send_app_msg:confirm':  
                        case 'send_app_msg:ok':  
                            callbacks.confirm && callbacks.confirm(resp);  
                            break;  
                        // send_app_msg:fail 发送失败  
                        case 'send_app_msg:fail':  
                        default:  
                            callbacks.fail && callbacks.fail(resp);  
                            break;  
                    }  
                    // 无论成功失败都会执行的回调  
                    callbacks.all && callbacks.all(resp);  
                });  
            };  
            WeixinJSBridge.on('menu:share:appmessage', function (argv) {  
                if (callbacks.async && callbacks.ready) {  
                    window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();  
                    if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {  
                        window["_wx_loadedCb_"] = new Function();  
                    }  
                    callbacks.dataLoaded = function (newData) {  
                        window["_wx_loadedCb_"](newData);  
                        sendAppMessage(newData);  
                    };  
                    // 然后就绪  
                    callbacks.ready && callbacks.ready(argv);  
                } else {  
                    // 就绪状态  
                    callbacks.ready && callbacks.ready(argv);  
                    sendAppMessage(data);  
                }  
            });  
        }  
      
        /** 
         * 分享到腾讯微博 
         * @param       {Object}    data       待分享的信息 
         * @p-config    {String}    link       链接地址 
         * @p-config    {String}    desc       描述 
         * 
         * @param       {Object}    callbacks  相关回调方法 
         * @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false 
         * @p-config    {Function}  ready(argv)             就绪状态 
         * @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空 
         * @p-config    {Function}  cancel(resp)    取消 
         * @p-config    {Function}  fail(resp)      失败 
         * @p-config    {Function}  confirm(resp)   成功 
         * @p-config    {Function}  all(resp)       无论成功失败都会执行的回调 
         */  
        function weixinShareWeibo(data, callbacks) {  
            callbacks = callbacks || {};  
            var shareWeibo = function (theData) {  
                WeixinJSBridge.invoke('shareWeibo', {  
                    "content":theData.desc,  
                    "url":theData.link  
                }, function (resp) {  
                    switch (resp.err_msg) {  
                        // share_weibo:cancel 用户取消  
                        case 'share_weibo:cancel':  
                            callbacks.cancel && callbacks.cancel(resp);  
                            break;  
                        // share_weibo:confirm 发送成功  
                        case 'share_weibo:confirm':  
                        case 'share_weibo:ok':  
                            callbacks.confirm && callbacks.confirm(resp);  
                            break;  
                        // share_weibo:fail 发送失败  
                        case 'share_weibo:fail':  
                        default:  
                            callbacks.fail && callbacks.fail(resp);  
                            break;  
                    }  
                    // 无论成功失败都会执行的回调  
                    callbacks.all && callbacks.all(resp);  
                });  
            };  
            WeixinJSBridge.on('menu:share:weibo', function (argv) {  
                if (callbacks.async && callbacks.ready) {  
                    window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();  
                    if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {  
                        window["_wx_loadedCb_"] = new Function();  
                    }  
                    callbacks.dataLoaded = function (newData) {  
                        window["_wx_loadedCb_"](newData);  
                        shareWeibo(newData);  
                    };  
                    // 然后就绪  
                    callbacks.ready && callbacks.ready(argv);  
                } else {  
                    // 就绪状态  
                    callbacks.ready && callbacks.ready(argv);  
                    shareWeibo(data);  
                }  
            });  
        }  
      
      
        /** 
         * 新的分享接口 
         * @param       {Object}    data       待分享的信息 
         * @p-config    {String}    appId      公众平台的appId(服务号可用) 
         * @p-config    {String}    imgUrl     图片地址 
         * @p-config    {String}    link       链接地址 
         * @p-config    {String}    desc       描述 
         * @p-config    {String}    title      分享的标题 
         * 
         * @param       {Object}    callbacks  相关回调方法 
         * @p-config    {Boolean}   async                   ready方法是否需要异步执行,默认false 
         * @p-config    {Function}  ready(argv,shareTo)             就绪状态 
         * @p-config    {Function}  dataLoaded(data)        数据加载完成后调用,async为true时有用,也可以为空 
         * @p-config    {Function}  cancel(resp,shareTo)    取消 
         * @p-config    {Function}  fail(resp,shareTo)      失败 
         * @p-config    {Function}  confirm(resp,shareTo)   成功 
         * @p-config    {Function}  all(resp,shareTo)       无论成功失败都会执行的回调 
         */  
        function weixinGeneralShare(data, callbacks) {  
            callbacks = callbacks || {};  
            var generalShare = function (general,theData) {  
      
                // 如果是分享到朋友圈,则需要把title和desc交换一下  
                if(general.shareTo == 'timeline') {  
                    var title = theData.title;  
                    theData.title = theData.desc || title;  
                    theData.desc = title;  
                }  
      
                // 分享出去  
                general.generalShare({  
                    "appid":theData.appId ? theData.appId : '',  
                    "img_url":theData.imgUrl,  
                    "link":theData.link,  
                    "desc":theData.desc,  
                    "title":theData.title,  
                    "img_width":"640",  
                    "img_height":"640"  
                }, function (resp) {  
                    switch (resp.err_msg) {  
                        // general_share:cancel 用户取消  
                        case 'general_share:cancel':  
                            callbacks.cancel && callbacks.cancel(resp ,general.shareTo);  
                            break;  
                        // general_share:confirm 发送成功  
                        case 'general_share:confirm':  
                        case 'general_share:ok':  
                            callbacks.confirm && callbacks.confirm(resp ,general.shareTo);  
                            break;  
                        // general_share:fail 发送失败  
                        case 'general_share:fail':  
                        default:  
                            callbacks.fail && callbacks.fail(resp ,general.shareTo);  
                            break;  
                    }  
                    // 无论成功失败都会执行的回调  
                    callbacks.all && callbacks.all(resp ,general.shareTo);  
                });  
            };  
            WeixinJSBridge.on('menu:general:share', function (general) {  
                if (callbacks.async && callbacks.ready) {  
                    window["_wx_loadedCb_"] = callbacks.dataLoaded || new Function();  
                    if(window["_wx_loadedCb_"].toString().indexOf("_wx_loadedCb_") > 0) {  
                        window["_wx_loadedCb_"] = new Function();  
                    }  
                    callbacks.dataLoaded = function (newData) {  
                        window["_wx_loadedCb_"](newData);  
                        generalShare(general,newData);  
                    };  
                    // 然后就绪  
                    callbacks.ready && callbacks.ready(general,general.shareTo);  
                } else {  
                    // 就绪状态  
                    callbacks.ready && callbacks.ready(general,general.shareTo);  
                    generalShare(general,data);  
                }  
            });  
        }  
      
        /** 
         * 加关注(此功能只是暂时先加上,不过因为权限限制问题,不能用,如果你的站点是部署在*.qq.com下,也许可行) 
         * @param       {String}    appWeixinId     微信公众号ID 
         * @param       {Object}    callbacks       回调方法 
         * @p-config    {Function}  fail(resp)      失败 
         * @p-config    {Function}  confirm(resp)   成功 
         */  
        function addContact(appWeixinId,callbacks){  
            callbacks = callbacks || {};  
            WeixinJSBridge.invoke("addContact", {  
                webtype: "1",  
                username: appWeixinId  
            }, function (resp) {  
                var success = !resp.err_msg || "add_contact:ok" == resp.err_msg || "add_contact:added" == resp.err_msg;  
                if(success) {  
                    callbacks.success && callbacks.success(resp);  
                }else{  
                    callbacks.fail && callbacks.fail(resp);  
                }  
            })  
        }  
      
        /** 
         * 调起微信Native的图片播放组件。 
         * 这里必须对参数进行强检测,如果参数不合法,直接会导致微信客户端crash 
         * 
         * @param {String} curSrc 当前播放的图片地址 
         * @param {Array} srcList 图片地址列表 
         */  
        function imagePreview(curSrc,srcList) {  
            if(!curSrc || !srcList || srcList.length == 0) {  
                return;  
            }  
            WeixinJSBridge.invoke('imagePreview', {  
                'current' : curSrc,  
                'urls' : srcList  
            });  
        }  
      
        /** 
         * 显示网页右上角的按钮 
         */  
        function showOptionMenu() {  
            WeixinJSBridge.call('showOptionMenu');  
        }  
      
      
        /** 
         * 隐藏网页右上角的按钮 
         */  
        function hideOptionMenu() {  
            WeixinJSBridge.call('hideOptionMenu');  
        }  
      
        /** 
         * 显示底部工具栏 
         */  
        function showToolbar() {  
            WeixinJSBridge.call('showToolbar');  
        }  
      
        /** 
         * 隐藏底部工具栏 
         */  
        function hideToolbar() {  
            WeixinJSBridge.call('hideToolbar');  
        }  
      
        /** 
         * 返回如下几种类型: 
         * 
         * network_type:wifi     wifi网络 
         * network_type:edge     非wifi,包含3G/2G 
         * network_type:fail     网络断开连接 
         * network_type:wwan     2g或者3g 
         * 
         * 使用方法: 
         * WeixinApi.getNetworkType(function(networkType){ 
         * 
         * }); 
         * 
         * @param callback 
         */  
        function getNetworkType(callback) {  
            if (callback && typeof callback == 'function') {  
                WeixinJSBridge.invoke('getNetworkType', {}, function (e) {  
                    // 在这里拿到e.err_msg,这里面就包含了所有的网络类型  
                    callback(e.err_msg);  
                });  
            }  
        }  
      
        /** 
         * 关闭当前微信公众平台页面 
         */  
        function closeWindow() {  
            WeixinJSBridge.call("closeWindow");  
        }  
      
        /** 
         * 当页面加载完毕后执行,使用方法: 
         * WeixinApi.ready(function(Api){ 
         *     // 从这里只用Api即是WeixinApi 
         * }); 
         * @param readyCallback 
         */  
        function wxJsBridgeReady(readyCallback) {  
            if (readyCallback && typeof readyCallback == 'function') {  
                var Api = this;  
                var wxReadyFunc = function () {  
                    readyCallback(Api);  
                };  
                if (typeof window.WeixinJSBridge == "undefined"){  
                    if (document.addEventListener) {  
                        document.addEventListener('WeixinJSBridgeReady', wxReadyFunc, false);  
                    } else if (document.attachEvent) {  
                        document.attachEvent('WeixinJSBridgeReady', wxReadyFunc);  
                        document.attachEvent('onWeixinJSBridgeReady', wxReadyFunc);  
                    }  
                }else{  
                    wxReadyFunc();  
                }  
            }  
        }  
      
        return {  
            version         :"2.0",  
            ready           :wxJsBridgeReady,  
            shareToTimeline :weixinShareTimeline,  
            shareToWeibo    :weixinShareWeibo,  
            shareToFriend   :weixinSendAppMessage,  
            generalShare    :weixinGeneralShare,  
            addContact      :addContact,  
            showOptionMenu  :showOptionMenu,  
            hideOptionMenu  :hideOptionMenu,  
            showToolbar     :showToolbar,  
            hideToolbar     :hideToolbar,  
            getNetworkType  :getNetworkType,  
            imagePreview    :imagePreview,  
            closeWindow     :closeWindow  
        };  
    })();  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、WeixinApi为何诞生 以前顺便玩儿了下微信公众账号,做Web前端开发的,都对页面脚本充满好奇,所以研究了下,放到Blog上, 也正因为微信官方一直没有放出正式的Api提供给用户来用,所以大量的用户到我blog上去询问WeixinJSBridge相关的技术点,索性我就整理了一下, 起个名字叫WeixinApi开源到github来,提供给大家使用! 2、免责声明 此Api为非官方版,由于官方的限制,继续使用此Api还有可能会出现一些意向不到的问题,一切后果请自行承担! 3、WeixinApi可能停止更新 目前官方已经出了正式版本的SDK,详情可见微信JS-SDK说明文档, 所以大家还是尽早迁移到官方版本吧,这对大家来说是好事,以后出什么问题,官方渠道应该都会第一时间给出解决方案,稳定很多,也不至于经常被黑! 本API可能以后就不会频繁更新了,各位知晓! 快速使用方法: // 定义微信分享的数据 var wxData = {     "appId": "", // 服务号可以填写appId     "imgUrl" : 'http://photocdn.sohu.com/20130122/Img364302298.jpg',     "link" : 'http://www.baidufe.com',     "desc" : '使用警告:此Api非官方版本,请各位尽量将分享功能迁移至腾讯官方版,会更稳定些!',     "title" : "欢迎使用WeixinApi" }; // 分享的回调 var wxCallbacks = {     // 收藏操作是否触发回调,默认是开启的     favorite : false,     // 分享操作开始之前     ready : function() {         // 你可以在这里对分享的数据进行重组         alert("准备分享");     },     // 分享被用户自动取消     cancel : function(resp) {         // 你可以在你的页面上给用户一个小Tip,为什么要取消呢?         alert("分享被取消,msg="   resp.err_msg);     },     // 分享失败了     fail : function(resp) {         // 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?         alert("分享失败,msg="   resp.err_msg);     },     // 分享成功     confirm : function(resp) {         // 分享成功了,我们是不是可以做一些分享统计呢?         alert("分享成功,msg="   resp.err_msg);     },     // 整个分享过程结束     all : function(resp,shareTo) {         // 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?         alert("分享"   (shareTo ? "到"   shareTo : "")   "结束,msg="   resp.err_msg);     } }; // 自定义分享到:微信好友、朋友圈、腾讯微博、QQ好友 WeixinApi.share(wxData,wxCallbacks); 标签:WeixinApi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值