以前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript Interface)的文章,不过随着微信官方的调整,部分API已经不能直接使用,好比相似直接分享到朋友圈 WeixinJSBridge.invoke('shareTimeline',data,callback) 这样的功能,直接调用,会获得一个访问拒绝的response。后来从新调研了下,整理出来了一个WeixinAPI的Javascript类库,分享出来,若是你对微信公众平台开发感兴趣,应该对你有用。前端

下面,咱们先来看一下这些API都应该怎么使用,先从最简单的入手。git

一、假如我但愿一打开网页后,就隐藏掉右上角的PopUp菜单入口,而且隐藏掉浏览器下方的工具栏,同时还要得到当前的网络状态,那么,咱们的代码能够这样来写:github

如示例代码中的注释所示,全部的功能执行必须放在 WeixinApi.ready 方法中执行,就比如你用jQuery的时候,一般都须要使用 jQuery(document).ready(function(){ }) 同样。为何要这样作?相信不用我解释你们都能明白,由于咱们必需要保证在执行这些方法的时候,WeixinJsBridge API已经被加入到WebView上了!ajax

二、再来看一个有关分享的例子,假如用户在阅读个人文章(或在使用个人产品)的过程当中,发现它颇有意思或有价值,通常都会将其收藏或分享(给好友、朋友圈、微博等)出去,那如今我就但愿能监测到用户的分享行为,好比:自定义用户可分享的内容、甚至是在用户分享之、分享被取消、分享失败、分享成功、以及整个分享操做过程结束,咱们都去作点儿什么。那么,这个代码咱们能够这样来写:浏览器

三、固然,若是你的业务需求至关复杂,好比,你的产品就是一个微信网页游戏(相似“2048数字游戏微信版”),你但愿用户分享出去的数据是一个网页截屏、或者须要将用户当前的游戏状态回传到服务器动态生成可分享的内容;那么这种状况咱们又该怎么作呢?来看下面这个示例代码吧:服务器

惟一的区别就是在wxCallbacks中,增长了配置项async为true,表示这个分享过程是异步调用的,其实就是指的ready方法异步执行,在这种状况下,咱们须要在ready方法中显式地调用wxCallbacks的dataLoaded方法,以保证分享过程能继续往下执行。也许你会发现,这个wxCallbacks中,根本就没有配置dataLoaded方法啊!是的,当async为true时,WeixinApi中我会自动对其进行初始化,dataLoaded方法须要一个参数,表示须要分享出去的数据!微信

四、固然,若是你非要去配置dataLoaded方法,也是没有问题的,你的配置也会被执行,不会被覆盖,执行顺序是:用户配置优先。网络

上面是直接给出使用方法,也许你如今开始关心每一个方法的参数列表是什么样的了?咱们以分享到朋友圈的方法为例,来看看参数都有哪些配置项:app

分享给微信好友以及分享到腾讯微博的参数列表都同样,这里就不罗列了。

五、若是你的文章中有不少图片,那么,点击图片直接调起微信客户端自带的图片播放组件,那必然是一件好事;对此,你能够这样来作:

就这么一段儿简单的代码,一切都搞定了!不过,须要指出的是,Api.imagePreview的参数是会进行强检测的:

须要指出的是,微信公众平台对Android、iOS平台支持力度不统一,比较费劲,具体有:

iOS平台下,分享出去的数据wxData中,imageUrl能够是DataURI格式的;但在Android平台下,必须是全路径的图片地址

iOS平台下,分享的回调callback基本全均可以获得执行;但在Android平台下,分享到微信朋友圈的callback没法获得执行(ready方法除外)

iOS平台下,没法在非mp.weixin.qq.com域下的页面中经过WeixinJSBridge.invoke('profile')的方式打开某微信号的资料页面;Android平台下则能够经过的方式打开资料页;WinPhone下,则是经过的方式打开。

期待官方能早日实现各平台API的统一吧!!!

至于API内部是怎么实现的,若是感兴趣,那就看源码吧,使用过程当中如遇到什么Bug,请来这里反馈。

为了便于Api的维护与共享,已将其放到Github上了,你们这里走起:https://github.com/zxlie/WeixinApi