通过Js判断客户端为PC端还是手持设备

原理

Js中获取浏览器信息字符串只要使用navigator.userAgent即可,这样我们再利用indexof来判断版本或其它信息了。

代码实例

1.简化版

function IsPC() {
       var userAgentInfo = navigator.userAgent;
       var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
       var flag = true;
       for (var v = 0; v < Agents.length; v++) {
            if (userAgentInfo.indexOf(Agents[v]) > 0) {
                flag = false;
                break;
             }
       }
       return flag;
}

2.详细版

var browser={
    versions:function(){
           var u = navigator.userAgent, app = navigator.appVersion;
           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应该程序,没有头部与底部
            };
         }(),
         language:(navigator.browserLanguage || navigator.language).toLowerCase()
}

  if(browser.versions.mobile || browser.versions.ios || browser.versions.android ||
  	browser.versions.iPhone || browser.versions.iPad){
   		window.location = "http://m.zhaizhainv.com";
  }

3.基本版

js的

alert(navigator.userAgent.toLowerCase());

方式获取浏览器的userAgent信息

扩展

网络爬虫的爬取问题

爬虫请求头中的User-Agent也包含了特殊的标记信息,我们获取到该信息判断是否爬虫,然后返回最佳的SEO页面就可以了。

网络爬虫在发送http请求获取网页数据时也会在头部附加 User-Agent信息,特别注意的一点就是有些野蜘蛛 User-Agent信息为空,这样就需要在程序中做是否为空的判断,防止robots.txt 文件也对它的限制无效,导致不断的爬去你的网站。

可以像下面这样(PHP实例,其他同理),判断到访问者的User-Agent为空,则返回404:

<?php
   $flag = false;
   $ua = $SERVER['HTTP_USER_AGENT'];
   if($ua == ''){
      $flag = true;
   }
   if($flag){
      header('HTTP/1.1 404 Not Found');
      header("status: 404 Not Found");
      echo '您的请求未通过我们的验证!';
      exit();
   }
?>

主要搜索引擎官方给出的一些user agent信息:

百度:http://www.baidu.com/search/spider.htm

google:https://support.google.com/webmasters/answer/1061943

360:http://www.so.com/help/help_3_2.html

sogou:http://www.sogou.com/docs/help/webmasters.htm#07

soso:http://help.soso.com/webspider.htm(这条可以无视,原因你懂得)

原理、标记信息等说的差不多了,剩下的靠自己啦,不管你要拿去做什么,不要让我知道哦,我什么都不知道= =

参考地址

Js判断客户端是否为PC还是手持设备

利用JS userAgent判断识别浏览器代码

HTTP请求中的User-Agent 判断浏览器类型的各种方法 网络爬虫的请求标示

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习网

Java 并发包中的读写锁及其实现分析

Java 并发包中的读写锁及其实现分析 1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线...

3554
来自专栏LIN_ZONE

js 判断当前操作系统是ios还是android还是电脑端

1472
来自专栏小勇DW3

网页爬虫小记:两种方式的爬取网站内容

此处进行简单的分类,对于普通的网页爬取内容,如果没有登录界面可以直接使用Jsoup的API进行爬取;

2092
来自专栏Zachary46

Python爬取qq空间说说

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invi...

1873
来自专栏农夫安全

sqlmap被ban了ip怎么办

sqlmap被ban了ip怎么办 第一种办法 好不容易挖到的注入点,结果总是因为请求速度过快被ban掉ip,我觉得可以给sqlmap加个代理池!暑假前的想法,...

6636
来自专栏java一日一条

Java 并发包中的读写锁及其实现分析

在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访...

752
来自专栏企鹅号快讯

Python接口自动化-4-HTTPS请求

Requests 可以为 HTTPS 请求验证 SSL 证书,就像 web 浏览器一样。SSL 验证默认是开启的。 verify参数: 默认verify=Tru...

3009
来自专栏龙首琴剑庐

Python之多线程爬虫抓取网页图片

目标 嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。 我们下载的时候,得鼠标一个个下载,而且还翻页。 那么,有没有一种方法,可以使用非人工方式自动识别并...

4805
来自专栏落影的专栏

编译与链接过程的思考

前言 最近遇到一个错误,如下 ? 在解决过程中,回顾了很多知识,于是有了这篇文章。 关键词:预处理、编译、汇编、链接、动态链接库、静态链接库、真机调...

5209
来自专栏我是攻城师

深入理解Java8并发工具类StampedLock

StampedLock类是JDK8里面新增的一个并发工具类,这个类比较特殊,在此之前我们先简单的了解一下关于数据库或者存储系统的锁策略和机制。

1702

扫码关注云+社区

领取腾讯云代金券