第9章 客户端检测

1.能力检测
能力检测的基本模式:

if(object.propertyInQuestion){
	//使用object.propertyInQuestion
}

概念
1.检测达成目的的最常用特性
2.必须测试实际要用到的特性,一个特性存在,不代表另一个特性也存在

更可靠的能力检测
尽量使用typeof

function isSortable(object){
	return typeof object.sort=="function"
}

IE8及之前版本中
typeof document.creatElement() 会返回object
typeof xhr.open 会返回unknown
可以对方法进行增强

function isHostMethod(object,property){
	var t = type of object[property]; 
	return t=="function" || 
	(!!t=='object'&& object[property]) ||
	t=='unknown';
}
result=isHostMethod(xhr,'open') //true
result=isHostMethod(xhr,'foo') //false

注意能力检测不是浏览器检测
检测某个或几个特性并不能够确定浏览器。
可以根据浏览器特性不同组合检测

// 确定浏览器是否支持Netscaper风格的插件
var hasNSPligins = !!(navigator.plugins&&navigator.plugins.length);
var hasDOM1=!!( document.getElementById && document.creatElement &&
 document.getElementsByTagName);

怪癖检测
用于检测浏览器有什么BUG

用户代理检测
万不得已才使用,有可能被电子欺骗
http请求过程中,用户代理字符串是作为响应首部发送。
通过navigator.userAgent属性访问

识别呈现引擎&浏览器&平台设备操作系统
五大引擎 IE Gecko WebKit KHTML Opera

var client =function(){
	var engine={
		ie:0,
		gecko:0,
		webkit:0,
		opera:0,
		khtml:0,
		ver:null
	};
	var browser={
		ie:0,
		firefox:0,
		safari:0,
		konq:0,
		opera:0,
		chrome:0,
		ver:null
	};
	var system={
		win:false,
		mac:false,
		x11:false,
		//移动设备
		iphone:false,
		ipod:false,
		ipad:false,
		ios:false,
		android:false,
		nokiaN:false,
		winMobile:false,
		//游戏系统
		wii:false,
		ps:false,
	};
	
}()
//检测呈现引擎和浏览器
var ua =navigator.userAgent
if(window.opera){
	engine.ver=browser.ver=window.opera.version;
	engine.opera=browser.opera=parseFloat(engine.ver);
}else if(/AppleWebKit\/(\S+)/.test(ua)){
	engine.ver=RegExp["$1"]);
	engine.webkit=parseFloat(engine.ver);
	//确定是Chrome还是Safari
	if(/Chrome\/(\S+).test(ua)){
		browser.ver==RegExp["$1"]);
		browser.chrome=parseFloat(browser.ver);
	}else if(/Version\/(\S+).test(ua)){
		browser.ver==RegExp["$1"]);
		browser.safari=parseFloat(browser.ver);
	}else{
		//近似的确定版本号
		var safariVersion=1;
		if(engine.webkit<100){
			 safariVersion=1;
		}else if(engine.webkit<312){
			safariVersion=1.2;
		}else if(engine.webkit<412){
			safariVersion=1.3;
		}else{
			safariVersion=2;
		}
		browser.safari=browser.ver=safariVersion;
	}
}else if(/KHTML\/(\s+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){
	engine.ver=browser.ver=RegExp["$1"]);
	engine.khtml=browser.konq=parseFloat(engine.ver);
}else if(/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
	engine.ver=RegExp["$1"]);
	engine.gecko=parseFloat(engine.ver);
	//确定是不是Firefox
	if(/Firefox\/(\S+).test(ua)){
		browser.ver=RegExp["$1"]);
		browser.firefox=parseFloat(browser.ver);
	}
}else if(/MSIE ([^;]+)/.test(ua)){
	engine.ver=browser.ver=RegExp["$1"]);
	engine.ie=browser.ie=parseFloat(engine.ver);
}

//检测浏览器
browser.ie=engine.ie;
browser.opera=engine.opera;

//检测平台
var p=navigator.platform;
system.win=p.indexOf("win")==0;
system.win=p.indexOf("Mac")==0;
system.win=p.indexOf("X11")==0 || (p.indexOf("Linux")==0);

//检测Windows操作系统
if(system.win){
	if(/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
		if(RegExp["$1"]=="NT"){
			switch(RegExp["$2"]){
				case "5.0":
					system.win="2000";
					break;
				case "5.1":
					system.win="XP";
					break;
				case "6.0":
					system.win="Vista";
					break;
				case "6.1":
					system.win="7";
					break;
				default:
					system.win="Nt";
					break;
			}
			
		}else if(RegExp["$1"]=="9X"){
			system.win="ME";
		}else{
			system.win=RegExp["$1"];
		}
	}
}

//移动设备
system.iphone=ua.indexOf("iPhone") >-1;
system.ipod=ua.indexOf("iPod") >-1;
system.ipad=ua.indexOf("iPad") >-1;
system.nokiaN=ua.indexOf("NokiaN") >-1;

//windows mobile
if(system.win=="CE"){
	system.winMobile=system.win;
}else if(system.win=="Ph"){
	if(/Windows Phone OS (\d+.\d+)/.test(ua)){
		system.win = "Phone";
		system.winMobile=parseFloat(RegExp["$1"]);
	}
}

//检测IOS
if(system.mac && ua.indexOf("Mobile")>-1){
	if(/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)){
		system.ios=parseFloat(RegExp["$1"].replace("_","."));
	}else{
		system.ios=2 //不能真正检测出来 所以只能猜测
	}
}

//检测Android系统
if(/Android (\d+\.\d+)/test(ua)){
	system.android=parseFloat(RegExp["$1"]);
}

//游戏系统
system.wii=ua.indexOf("Wii")>-1;
system.ps=/palystation/i.test(ua);

return {engine:engine,browser:browser,system:system};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值