之因此要寫這篇文章,主要是最近一段時間在負責作微信方面的開發工做,領導對系統有兩個基本的要求:html
1.只能在微信環境下打開;前端
2.自適應微信客戶端的語言設置,呈現對應語言的界面及內容;瀏覽器
做爲一名攻城獅,通過簡單的分析,能夠從這兩個需求中提取出兩個技術點:服務器
1.如何斷定當前系統是在微信環境中運行;微信
2.如何獲取微信客戶端的語言設置信息;spa
若是咱們能經過某種手段解決了兩個技術點,也就能夠大膽的向領導立軍令狀了。3d
好了,閒話少說,咱們進入正題。先說一下咱們要作的這個項目是H5項目,講到H5相信部分小夥伴已經知道怎麼玩了,不過我仍是繼續往下說,既然是H5,那麼咱們首先會想到的是什麼?沒錯,是瀏覽器。那麼咱們怎麼經過抓取瀏覽器的信息來斷定是在微信中打開的呢?咱們接下來就看下若是一個頁面是使用微信內置瀏覽器打開的會有什麼特殊的標識。code
相信眼疾手快的小夥伴已經發現了,沒錯就是User-Agent,經過上面兩張圖咱們不難發現,若是是使用微信內置瀏覽器打開的網頁User-Agent中都會包含一個關鍵詞MicroMessenger/6.6.6 其中6.6.6是微信客戶端版本呢,咱們這裏用不到,咱們只須要獲取當前User-Agent的值並斷定是否包含MicroMessenger便可斷定,當前H5是否運行在微信內置瀏覽器中。htm
好了,解決了斷定H5是否運行在微信內置瀏覽器的問題,接下來要作的事情就是就如何獲取微信客戶端的語言設置,這裏可能有的小夥伴要問了,User-Agent裏面有一段文案Language/en會不會就是當前微信客戶端的語言設置,哈哈,咱們來驗證下,方法同上上,經過不斷修改微信客戶端的語言和抓包能夠發現,User-Agent中的Language/en果真會跟着微信客戶端的語言設置變化作相應的變化,換句話說咱們能夠經過Language/en來獲得微信客戶端的語言設置。blog
手癢了,下面咱們來看下怎麼經過代碼獲取到User-Agent的數據並斷定是否運行在微信客戶端內(獲取並斷定微信客戶端語言設置同理),對於User-Agent的數據,能夠經過前端獲取也能夠經過服務器端獲取,咱們下面分別展現下:
1 function runInWeChat(){ 2 var userAgent = window.navigator.userAgent.toLowerCase(); 3 if(ua.match(/MicroMessenger/i)=="micromessenger") { 4 return true; 5 } else { 6 return false; 7 } 8 }
1 string micMessage = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"]; 2 if (micMessage.ToStringEx().ToLower().Contains("micromessenger")) 3 { 4 //當前運行在微信客戶端內置瀏覽器中 5 }
寫到這裏,相信聰明的小夥伴也已經知道如何獲取斷定當前微信客戶端語言設置了,祝各位好運。