zoukankan      html  css  js  c++  java
  • 使用JavaScript判断用户是否为手机设备

    最近在做微信服务号开发,其中遇到一个问题是微信服务号查看的个人的消息,如果点击在浏览器中查看(iOS中是在Safari中打开)应该是跳转到登录页面,因为页面需要从后台获取,因为需要服务端判断,如果是存页面不需要后台数据可以在前台进行判断,因为后台是NodeJS,所以给出客户端和服务端两个版本的代码供参考。

    客户端判断

    方法很简单,就是通过userAgent去判断,先判断是否为移动端,可以判断是iOS终端和Android终端,也可以具体到应用进行判断微信,微博,qq访问:

    var browser = {
      versions: function() {
      var u = navigator.userAgent,
      ua = navigator.userAgent.toLowerCase();
      return { //移动终端浏览器版本信息
      trident: u.indexOf('Trident') > -1, //IE内核
      presto: u.indexOf('Presto') > -1, //opera内核
      webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
      gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
      mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
      ios: !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
      android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
      iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
      iPad: u.indexOf('iPad') > -1, //是否iPad
      webApp: u.indexOf('Safari') == -1 ,//是否web应该程序,没有头部与底部
      wechat:ua.match(/MicroMessenger/i) == "micromessenger",//微信
      weibo:ua.match(/WeiBo/i) == "weibo",//微博
      qq:ua.match(/QQ/i) == "qq"//qq
    };
    }(),
    language: (navigator.browserLanguage || navigator.language).toLowerCase()
    };
    console.log(navigator.userAgent);
    服务端判断

    NodeJS同样也是通过userAgent判断,代码如下:


    var browser= function(req) {
      var u = req.headers['user-agent'];
      var ua = u.toLowerCase();
      //移动终端浏览器版本信息
      return {
        trident: u.indexOf('Trident') > -1, //IE内核
        presto: u.indexOf('Presto') > -1, //opera内核
        webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
        gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
        mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
        ios: !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
        android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
        iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
        iPad: u.indexOf('iPad') > -1, //是否iPad
        webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
        wechat: ua.match(/MicroMessenger/i) == "micromessenger",//微信
        weibo: ua.match(/WeiBo/i) == "weibo",//微博
        qq: ua.match(/QQ/i) == "qq"//QQ空间
    };
    };

    exports.browser=browser;
    基本的判断都有,可以根据判断的结果给出不同的响应~

  • 相关阅读:
    插件开发取路径
    使用SWT模拟鼠标键盘事件
    简单RCP框架源码分析
    dom4j中使用xpath解析带命名空间的xml文件,取不到节点的解决办法
    log4j不能输出配置文件问题的解决。
    SWT中定时器的一种特殊实现方式/SWT中线程互访时display.asyncExec/display.syncExec...程序死掉无响应的解决办法
    Eclipse插件开发中对于外部Jar包和类文件引用的处理(彻底解决插件开发中的NoClassDefFoundError问题)
    zk 3.6数据绑定
    PythonExcel 模块对比
    去除数组中重复元素
  • 原文地址:https://www.cnblogs.com/Apollo/p/5538834.html
Copyright © 2011-2022 走看看