一、如何判斷是否爲微信內置瀏覽器?
答:通過Header信息裏的User-agent來判斷,通過識別MicroMessenger這個關鍵字來確定是否來自微信。即微信的內置瀏覽器的user-agent信息中含有MicroMessenger。
例如:
小米 2A手機微信內置瀏覽器中的useragent信息爲:Mozilla/5.0(Linux;U;Android 4.1.1;zh-cn;MI 2A Build/JRO03L)AppleWebKit/534.30(KHTML,like Gecko) Version/4.0 Mobile Safri/534.30 MicroMessenger/5.0.3.354 谷歌瀏覽器:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36 火狐瀏覽器:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0 IE瀏覽器:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ZHCNMSN)
二、如何獲取Header中的user-agent信息?
答:在PHP中,可通過$_SERVER['HTTP_USER_AGENT']來獲取user-agent信息。
三、微信分享到朋友圈的腳本奧祕
微信最近推出的一個社交工具網站www.faxinxi.la,能發投票、活動、文章。譬如你發一個投票,網址是http://www.faxinxila.com/post/vote,但你填完所有信息按提交後,網頁地址並沒有發生跳轉,而是ajax提交信息後彈出的一個遮罩層,提示你點右上角的分享按鈕,注意,點擊分享齊納網址一直保持在/post/vote路徑,但點開分享裏的信息已經發生了變化,分享出去後,網址也發生了變化,變成了/vote/3投票實際的展示路徑。這是怎麼做到的呢? 查看faxinxi裏唯一js文件,你會發現一個WeixinJSBridge的輸出對象,再對比下通過微信公衆平臺發出來的文章源文件,也有WeixinJSBridge對象腳本,問題迎刃而解,微信在內嵌webview
裏輸出了WeixinJSBridge對象供web斷js調用。faxinxi已經將有用的js提取出來; ,詳細腳本如下:
<!-- lang: js --> var dataForWeixin={ <!-- lang: js --> appId:"", <!-- lang: js --> MsgImg:"http://img1.faxinxila.net/images/share_msg.png", <!-- lang: js --> TLImg:"http://img1.faxinxila.net/images/share.png", <!-- lang: js --> url:"http://faxinxi.la/vote/1", <!-- lang: js --> title:"input title here", <!-- lang: js --> desc:"input description here", <!-- lang: js --> fakeid:"", <!-- lang: js --> callback:function(){} <!-- lang: js --> }; <!-- lang: js --> (function(){ <!-- lang: js --> var onBridgeReady=function(){ <!-- lang: js --> WeixinJSBridge.on('menu:share:appmessage', function(argv){ <!-- lang: js --> WeixinJSBridge.invoke('sendAppMessage',{ <!-- lang: js --> "appid":dataForWeixin.appId, <!-- lang: js --> "img_url":dataForWeixin.MsgImg, <!-- lang: js --> "img_width":"120", <!-- lang: js --> "img_height":"120", <!-- lang: js --> "link":dataForWeixin.url, <!-- lang: js --> "desc":dataForWeixin.desc, <!-- lang: js --> "title":dataForWeixin.title <!-- lang: js --> }, function(res){(dataForWeixin.callback)();}); <!-- lang: js --> }); <!-- lang: js --> WeixinJSBridge.on('menu:share:timeline', function(argv){ <!-- lang: js --> (dataForWeixin.callback)(); <!-- lang: js --> WeixinJSBridge.invoke('shareTimeline',{ <!-- lang: js --> "img_url":dataForWeixin.TLImg, <!-- lang: js --> "img_width":"120", <!-- lang: js --> "img_height":"120", <!-- lang: js --> "link":dataForWeixin.url, <!-- lang: js --> "desc":dataForWeixin.desc, <!-- lang: js --> "title":dataForWeixin.title <!-- lang: js --> }, function(res){}); <!-- lang: js --> }); <!-- lang: js --> WeixinJSBridge.on('menu:share:weibo', function(argv){ <!-- lang: js --> WeixinJSBridge.invoke('shareWeibo',{ <!-- lang: js --> "content":dataForWeixin.title, <!-- lang: js --> "url":dataForWeixin.url <!-- lang: js --> }, function(res){(dataForWeixin.callback)();}); <!-- lang: js --> }); <!-- lang: js --> WeixinJSBridge.on('menu:share:facebook', function(argv){ <!-- lang: js --> (dataForWeixin.callback)(); <!-- lang: js --> WeixinJSBridge.invoke('shareFB',{ <!-- lang: js --> "img_url":dataForWeixin.TLImg, <!-- lang: js --> "img_width":"120", <!-- lang: js --> "img_height":"120", <!-- lang: js --> "link":dataForWeixin.url, <!-- lang: js --> "desc":dataForWeixin.desc, <!-- lang: js --> "title":dataForWeixin.title <!-- lang: js --> }, function(res){}); <!-- lang: js --> }); <!-- lang: js --> }; <!-- lang: js --> if(document.addEventListener){ <!-- lang: js --> document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); <!-- lang: js --> }else if(document.attachEvent){ <!-- lang: js --> document.attachEvent('WeixinJSBridgeReady' , onBridgeReady); <!-- lang: js --> document.attachEvent('onWeixinJSBridgeReady' , onBridgeReady); <!-- lang: js --> } <!-- lang: js --> })();
我們可以通過更改var dataForWeixin來改變分享的地址,圖片,標題等。