没想到碰到的第一个大坑竟然是这种问题,原以为一个微信分享,不就是看着微信开发者文档,然后写几个配置参数就可以完成的么?就算开发者文档比较麻烦,像这种常用的功能不是应该公司早就封装好,拿来配置几个参数搞定的事情么!


0.先上结论吧

目前我发现的比较好的解决办法是使用官方的(分享组件)[http://open.mobile.qq.com/api/component/share],但是安卓下微信分享手机QQ方向会有问题。微信分享QQ方向,标题使用的是title标签,描述是链接地址,图标使用的是页面第一个img标签内容(尺寸应该是大于等于300*300)。所以可以使用`div display:none;`包含img标签。
ps:应该是微信API有问题,以后可能会被修复。

1.公司封装

在我项目开始不久前,另一个前端根据新的微信JS-SDK封装了分享方法,正好拿过来使用。使用还是挺方便的,只需要在引入插件前面定义全局对象即可。

1
2
3
4
5
var weChatShare = {
"title" : '分享标题', // 分享标题,建议主标题一行 18个字符以内
"desc" : '分享描述', // 分享描述,建议描述最多两行 36个字符以内
"img" : '分享图标url', // 分享图标,200*200
}

结果发现只有标题和描述,图标没有出来。手机QQ分享微信标题、描述、图片都没有出来。只能放弃。

后来查看代码,封装的挺基本的,一个生成随机字符串作为生成签名的函数,一个ajax请求根据随机字符串、链接从后台获取签名(签名获取后台方法可以参看微信JS-SDK),然后就是通过配置调用微信JS-SDK了。只是因为微信调用中配置imgUrl写错成了img导致图片没有出来。而手机QQ因为这些是微信的接口,手机QQ分享当然出不来了。当然,这都是后来再回头看的,项目期间时间紧,就一直在赶着找现成的方法。

2.微信旧的API

就是WeixinJSBridge这个对象,应该是已经不再推荐使用,但是还是可以生效的。因为是旧的嘛,我也没有太去了解。代码也就不贴了,直接忽略掉吧。
结果就是图片出来了,但是微信分享QQ以及QQ分享微信还是不够正常。

3.找正常项目

自己公司的基本上是找不到所谓正常的项目了,只能找其他公司的页面了。看了一遍,严格意义上的正常好像没有,不是QQ分享没有,就是微信分享QQ图片有问题,然后在滴滴的分享代码里找到这么一句if(mqq !== undefined)。然后顺着发现了mqq.data.setShareInfo。通过搜索这个方法名,发现了腾讯移动WEB开发平台。好吧,承认自己蠢,QQ分享当然是应该找QQ的API,微信的API当然不管用了。

4.分享组件

期间又经过了自己的一系列的尝试,不停的add、commit、push,最终无意间发现了这个,竟然有封装好的组件,但是腾讯移动WEB开发平台中的手机QQ下没有,微信下没有,竟然是藏在首页的热门API标签下的分享中,这里写的API不应该就是API吗,为什么是组件?我怎么知道这里的『API』会和文档中的API不同呢?
使用该组件后,IOS上一切正常,安卓下微信分享QQ无效。

5.图片隐藏法

如果没有调用API,分享的时候会选取页面中第一个img标签中的图片作为图标,所以可以是用div display:none;包含图标地址img标签使用。经测试,不要使用太小的图片,200 * 200的图片,微信分享会无法显示,会跳过继续寻找下一个图片作为图标。没有测试太多,300 * 300的应该是比较合适的尺寸。