微信浏览器内置WeixinJSBridge API

微信浏览器内置WeixinJSBridge API

微信浏览器是个特殊的环境,它内置了一些jsAPI却没公布出来,同时技术仍不成熟,部分接口在不同的环境下可能出现不能使用。

//加载完后执行,只在微信浏览内执行  
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {  
    // 分享给微信好友 (点击右上角发送给朋友时执行)  
    var wxData = {  
        "appId": "wx69d816f8fbc1066c", // 服务号可以填写appId  
        "imgUrl" : 'http://www.scscms.com/weixin/images/1.jpg',  
        "link" : 'http://www.scscms.com',  
        "desc" : '分享内容描述',  
        "title" : "分享标题"  
    };  
    WeixinJSBridge.on('menu:share:appmessage', function (argv) {  
        WeixinJSBridge.invoke('sendAppMessage', {  
            "appid":wxData.appId,  
            "img_url":wxData.imgUrl,  
            "link":wxData.link,  
            "desc":wxData.desc,  
            "title":wxData.title,  
            "img_width":"120",  
            "img_height":"120"  
        }, function (resp) {  
            alert(resp.err_msg);  
            // send_app_msg:cancel 用户取消  
            // send_app_msg:fail 发送失败  
            // send_app_msg:confirm 发送成功  
        });  
    });  
});

点击后弹出分享界面,同时可输入评论。接收到分别是两条信息,评论先显示,然后显示分享的组合。如果你的域名在白名单中还可以直接执行sendAppMessage分享,否则提示access_denied错误。如下:

//分享给朋友  
function sendAppMessage(title,desc,link,imgUrl){  
    WeixinJSBridge.invoke('sendAppMessage',{  
        "appid":'',//必须是正常的appid或者留空  
        "img_url":imgUrl,  
        "link":link,  
        "desc": desc,  
        "title":title  
    });  
}

以下是分享到朋友圈代码:

    //分享到朋友圈  
    function weixinShareTimeline(title,desc,link,imgUrl){  
        WeixinJSBridge.invoke('shareTimeline',{  
            "img_url":imgUrl,  
            "link":link,  
            "desc": desc,  
            "title":title  
        });  
    }  
    //点右上角菜单分享时  
    document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {  
        WeixinJSBridge.on('menu:share:timeline', function (argv) {  
            weixinShareTimeline(title,desc,link,imgUrl);  
        });  
    });

分享到腾讯微博代码:

function shareWeibo(content, url) {  
    WeixinJSBridge.invoke('shareWeibo', {  
        "content":content, //评论  
        "url":url //标题与概要图片在此自动获取  
    }, function (res) {  
        alert(res.err_msg);  
        //share_weibo:ok 分享成功  
        //share_weibo:cancel 用户取消  
        //share_weibo:fail 分享失败  
    });  
}  
//点击右上角菜单分享时共用数据  
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {  
    WeixinJSBridge.on('menu:share:weibo', function (argv) {  
        shareWeibo(content, url);  
    })  
});

而针对微信浏览器右上角按钮及底部工具栏是可以隐藏或者显示的。

WeixinJSBridge.call('showOptionMenu');//显示网页右上角的按钮  
WeixinJSBridge.call('hideOptionMenu');//隐藏网页右上角的按钮  
WeixinJSBridge.call('showToolbar');//显示底部工具栏  
WeixinJSBridge.call('hideToolbar');//隐藏底部工具栏

还有在链接URL后面配置上 #wechat_webview_type=1 用微信打开就会自动隐藏底部工具栏。解决部分人希望进去就没有底部工具栏要求。

同时透露一个没公开的API,关闭微信浏览器返回微信聊天界面:

WeixinJSBridge.call('closeWindow');

获取用户的网络连接类型:

WeixinJSBridge.invoke('getNetworkType', {}, function (e) {  
    alert(e.err_msg);  
    /*network_type:wifi     wifi网络 
     * network_type:edge     非wifi,包含3G/2G 
     * network_type:fail     网络断开连接 
     * network_type:wwan     2g或者3g 
     */  
});

获取不同的链接传不同的数据是非常有利的。比如在edge链接下就别给我整大图片出来。如果是wifi模式下你才可整个大大的漂亮的图片出来,还可以调用微信的看图片API哦:

//微信原生看图  
var pic_list=['http://www.scscms.com/weixin/images/1.jpg','http://www.scscms.com/weixin/images/2.jpg'];//图片列表  
WeixinJSBridge.invoke('imagePreview', {  
    'current' : pic_list[0],  
    'urls' : pic_list  
});

微信中回复文本链接地址会自动识别为链接地址而形成可点击的链接,在开发模式下或网页快速回复发送<a href="url">文本</a>或者<a href='url'>文本</a>可正常显示链接,但如果没加引号将不正常显示,还有在web微信里都不能正常显示html。

Android平台下则可以通过<a href="weixin://contacts/profile/微信ID或微信号">的方式打开资料页,以便快速关注;WinPhone下,则是通过<a href="weixin://profile/微信ID">的方式打开。或者用下面代码来关注指定帐号:

//关注指定的微信号  
function weixinAddContact(name){  
    WeixinJSBridge.invoke("addContact", {webtype: "1",username: name}, function(e) {  
        WeixinJSBridge.log(e.err_msg);  
        //e.err_msg:add_contact:added 已经添加  
        //e.err_msg:add_contact:cancel 取消添加  
        //e.err_msg:add_contact:ok 添加成功  
        //e.err_msg:system:access_denied 拒绝访问  
        if(e.err_msg == 'add_contact:added' || e.err_msg == 'add_contact:ok'){  
            //关注成功,或者已经关注过  
        }  
    })  
}

问题是这些接口可不平民随便可以调用的,反正我常常得到的结果就是system:access_denied019.gif


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章