微信分享到朋友圈的脚本奥秘

一、如何判断是否为微信内置浏览器?

答:通过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

相关推荐