Http 协议请求头中的 User-Agent属性会将客户端设备的信息传递给服务器,这些信息包括客户端操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
 //获取浏览器信息
    var brows = {
        name: navigator.appName,
        version: navigator.appName,
        code: navigator.appCodeName,
        agent: navigator.userAgent
      }
      if((navigator.userAgent.indexOf("iPhone") != -1)||(navigator.userAgent.indexOf("Android") != -1)
      ||(navigator.userAgent.indexOf("iPad") != -1)) {
          // 进行移动端处理
      }

浏览器User-Agent(用户代理属性)_获取设备信息
浏览器User-Agent(用户代理属性)_微信_02
浏览器User-Agent(用户代理属性)_获取设备信息_03
浏览器User-Agent(用户代理属性)_User-Agent_04

根据 UserAgent 是否存在 Android,或 iPhone 可以判断网页是运行在 苹果手机 或 微信手机中。具体是安卓的在 微信中、还是在浏览器中、还是在APP中,在iPhone的 微信中、还是在浏览器中、还是在WebApp中,都可以通过UserAgent来判断。前端JS 获取 UserAgent 可以使用:navigator.userAgent。后端程序可以使用 HTTP_USER_AGENT 来获取。

安卓手机

APP/WebView

Mozilla/5.0 (Linux; Android 6.0.1; MX4 Build/MOB30M; wv) 
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/51.0.2704.106 Mobile Safari/537.36

微信

Mozilla/5.0 (Linux; Android 6.0.1; MX4 Build/MOB30M)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 
Mobile MQQBrowser/6.8 TBS/036849 Safari/537.36 MicroMessenger/6.3.27.880 
NetType/WIFI Language/zh_CN

浏览器

Mozilla/5.0 (Linux; Android 6.0.1; MX4 Build/MOB30M)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Mobile Safari/537.36

总结: 存在 Version,是App(微信或APP)内部的WebView
微信存在 MicroMessenger/ NetType/ Language/
不存在则为其他APP
其他模式为浏览器

苹果手机

webapp

Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X)
AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456

微信/WebView

Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X)
AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 MicroMessenger/6.3.27 NetType/WIFI Language/zh_CN

浏览器

Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X)
AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1

总结微信存在 MicroMessenger/ NetType/ Language/
手机浏览器存在 Version/XX.XX Mobile/XX.XX
啥都不存在是WebApp,还有个 window.navigator.standalone 判断