微信分享到朋友圈的脚本奥秘
一、如何判断是否为微信内置浏览器?
答:通过Header信息里的User-agent来判断,通过识别MicroMessenger这个关键字来确定是否来自微信。即微信的内置浏览器的user-agent信息中含有MicroMessenger。
例如:
1
小米2A手机微信内置浏览器中的useragent信息为:Mozilla/5.0(Linux;U;Android4.1.1;zh-cn;MI2ABuild/JRO03L)AppleWebKit/534.30(KHTML,likeGecko)Version/4.0MobileSafri/534.30MicroMessenger/5.0.3.354
2
3
谷歌浏览器:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/30.0.1599.101Safari/537.36
4
5
火狐浏览器:Mozilla/5.0(WindowsNT6.1;WOW64;rv:24.0)Gecko/20100101Firefox/24.0
6
7
IE浏览器:Mozilla/5.0(compatible;MSIE10.0;WindowsNT6.1;WOW64;Trident/6.0;EIE10;ZHCNMSN)
二、如何获取Header中的user-agent信息?
答:在PHP中,可通过$_SERVER['HTTP_USER_AGENT']来获取user-agent信息。
三、微信分享到朋友圈的脚本奥秘
1
微信最近推出的一个社交工具网站www.faxinxi.la,能发投票、活动、文章。譬如你发一个投票,网址是http://www.faxinxila.com/post/vote,但你填完所有信息按提交后,网页地址并没有发生跳转,而是ajax提交信息后弹出的一个遮罩层,提示你点右上角的分享按钮,注意,点击分享齐纳网址一直保持在/post/vote路径,但点开分享里的信息已经发生了变化,分享出去后,网址也发生了变化,变成了/vote/3投票实际的展示路径。这是怎么做到的呢?
2
3
查看faxinxi里唯一js文件,你会发现一个WeixinJSBridge的输出对象,再对比下通过微信公众平台发出来的文章源文件,也有WeixinJSBridge对象脚本,问题迎刃而解,微信在内嵌webview
里输出了WeixinJSBridge对象供web断js调用。faxinxi已经将有用的js提取出来;,详细脚本如下:
001
var dataForWeixin={
002
<!-- lang: js -->
003
appId:"",
004
<!-- lang: js -->
005
MsgImg:"http://img1.faxinxila.net/images/share_msg.png",
006
<!-- lang: js -->
007
TLImg:"http://img1.faxinxila.net/images/share.png",
008
<!-- lang: js -->
009
url:"http://faxinxi.la/vote/1",
010
<!-- lang: js -->
011
title:"input title here",
012
<!-- lang: js -->
013
desc:"input description here",
014
<!-- lang: js -->
015
fakeid:"",
016
<!-- lang: js -->
017
callback:function(){}
018
<!-- lang: js -->
019
};
020
<!-- lang: js -->
021
(function(){
022
<!-- lang: js -->
023
var onBridgeReady=function(){
024
<!-- lang: js -->
025
WeixinJSBridge.on('menu:share:appmessage', function(argv){
026
<!-- lang: js -->
027
WeixinJSBridge.invoke('sendAppMessage',{
028
<!-- lang: js -->
029
"appid":dataForWeixin.appId,
030
<!-- lang: js -->
031
"img_url":dataForWeixin.MsgImg,
032
<!-- lang: js -->
033
"img_width":"120",
034
<!-- lang: js -->
035
"img_height":"120",
036
<!-- lang: js -->
037
"link":dataForWeixin.url,
038
<!-- lang: js -->
039
"desc":dataForWeixin.desc,
040
<!-- lang: js -->
041
"title":dataForWeixin.title
042
<!-- lang: js -->
043
}, function(res){(dataForWeixin.callback)();});
044
<!-- lang: js -->
045
});
046
<!-- lang: js -->
047
WeixinJSBridge.on('menu:share:timeline', function(argv){
048
<!-- lang: js -->
049
(dataForWeixin.callback)();
050
<!-- lang: js -->
051
WeixinJSBridge.invoke('shareTimeline',{
052
<!-- lang: js -->
053
"img_url":dataForWeixin.TLImg,
054
<!-- lang: js -->
055
"img_width":"120",
056
<!-- lang: js -->
057
"img_height":"120",
058
<!-- lang: js -->
059
"link":dataForWeixin.url,
060
<!-- lang: js -->
061
"desc":dataForWeixin.desc,
062
<!-- lang: js -->
063
"title":dataForWeixin.title
064
<!-- lang: js -->
065
}, function(res){});
066
<!-- lang: js -->
067
});
068
<!-- lang: js -->
069
WeixinJSBridge.on('menu:share:weibo', function(argv){
070
<!-- lang: js -->
071
WeixinJSBridge.invoke('shareWeibo',{
072
<!-- lang: js -->
073
"content":dataForWeixin.title,
074
<!-- lang: js -->
075
"url":dataForWeixin.url
076
<!-- lang: js -->
077
}, function(res){(dataForWeixin.callback)();});
078
<!-- lang: js -->
079
});
080
<!-- lang: js -->
081
WeixinJSBridge.on('menu:share:facebook', function(argv){
082
<!-- lang: js -->
083
(dataForWeixin.callback)();
084
<!-- lang: js -->
085
WeixinJSBridge.invoke('shareFB',{
086
<!-- lang: js -->
087
"img_url":dataForWeixin.TLImg,
088
<!-- lang: js -->
089
"img_width":"120",
090
<!-- lang: js -->
091
"img_height":"120",
092
<!-- lang: js -->
093
"link":dataForWeixin.url,
094
<!-- lang: js -->
095
"desc":dataForWeixin.desc,
096
<!-- lang: js -->
097
"title":dataForWeixin.title
098
<!-- lang: js -->
099
}, function(res){});
100
<!-- lang: js -->
101
});
102
<!-- lang: js -->
103
};
104
<!-- lang: js -->
105
if(document.addEventListener){
106
<!-- lang: js -->
107
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
108
<!-- lang: js -->
109
}else if(document.attachEvent){
110
<!-- lang: js -->
111
document.attachEvent('WeixinJSBridgeReady' , onBridgeReady);
112
<!-- lang: js -->
113
document.attachEvent('onWeixinJSBridgeReady' , onBridgeReady);
114
<!-- lang: js -->
115
}
116
<!-- lang: js -->
117
})();我们可以通过更改vardataForWeixin来改变分享的地址,图片,标题等。
原文地址:http://blog.4wer.com/wechat-timeline-share