最近在做微信服务号开发,其中遇到一个问题是微信服务号查看的个人的消息,如果点击在浏览器中查看(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;

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

最新文章

  1. Puppet自动化部署-前期环境准备(2)
  2. 如何在fedora下安装fcitx和搜狗拼音
  3. iOS 获得指定文件夹下的指定格式文件
  4. java 部署服务报:Bad version number in .class file
  5. linux笔记:文件处理命令touch,cat,more,less,head,tail
  6. Word embedding blog
  7. 控制文本和外观------CSS Binding(CSS类名绑定)
  8. 生成N个不重复的随机数(转)
  9. ACM训练计划step 2 [非原创]
  10. axure制作圆形组件——axure制作技巧
  11. centos 7上搭建HDP2.3集群
  12. IIS 发布 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”
  13. MySQL之视图、触发器、事务、存储过程、函数
  14. [ts] Property 'aaa' does not exist on type 'Window' 解决办法
  15. Java大数相加(多个大数相加)-hdu1250
  16. 二分法求常数E,常数π,根号2
  17. Nginx高级应用之Location Url
  18. linux日志查找技巧
  19. Ubuntu 的 desktop 和 server 还是有区别。
  20. 【appium】根据name定位元素

热门文章

  1. Android-多进程初识
  2. GEEK-2018之隐藏在混乱之中的绝密情报 writeup
  3. Prim算法和Kruskal算法
  4. [java] 虚拟机(JVM)底层结构详解[转]
  5. A CANBus Tiny Network without Transceiver ICs : STM32F4 Discovery
  6. ubuntu下安装ftp服务器
  7. ERROR 2002 (HY000): Can't connect to local MySQL server through socket
  8. Why I Left the .NET Framework
  9. AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件
  10. Windows Phone本地数据库(SQLCE):5、[Association]attribute(翻译)(转)