看完了用户代理这章,自己把写代码写下来时有两个不明白的地方。
1、这个用户代理会设置一个浏览器的信息,在下面代码倒数第七行的代码是检测是否是firefox浏览器,如果是设置broswer的信息,如果不是,什么都没做。这样不是就没设置broswer的信息了吗?为什么不仿照opera和konq把引擎的信息写到broswer信息中呢?
2、最后在代码外还有
broswer.ie = engine.ie;
broswer.opera = engine.opera;
注释是说检测浏览器,不明白什么意思?浏览器不已经检测过了吗?
var client = (function () {
//呈现引擎
var engine = {
ie : 0,
gecko : 0,
webkit : 0,
khtml : 0,
opera : 0,
ver : null
};
//浏览器版本
var broswer = {
ie : 0,
firefox : 0,
chrome : 0,
safari : 0,
konq : 0,
opera : 0,
ver : null
};
//平台信息
var system = {
win : false,
mac : false,
x11 : false,
//移动设备
iphone : false,
ipod : false,
ipad : false,
ios : false,
andriod : false,
nokia : false,
winMobile : false,
//游戏平台
will : false,
ps : false
};
//用户代理检测
var ua = navigator.userAgent;
//opera会将自己完全伪造成其他浏览器所以先检测它
if (window.opera){
engine.opera = broswer.opera = parseInt(engine.ver);
engine.ver = broswer.ver = window.opera.version();
}else if (/AppleWebKit\/(\S+)/.test(ua)){
//webkit引擎的独有特征是AppleWebKit,利用正则表达式来获取版本号
engine.ver = RegExp.$1;
engine.webkit = parseInt(engine.ver);
//确认引擎后可以判断浏览器版本,chrome or safari
if (/chrome\/(\S+)/.test(ua)){
broswer.ver = RegExp.$1;
broswer.chrome = parseFloat(broswer.ver);
}else if (/Version\/(\S+)/.test(ua)){
broswer.ver = RegExp.$1;
broswer.safari = parseFloat(broswer.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;
}
broswer.ver = broswer.safari = safariVersion;
}
} else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/[^;]+/.test(ua)){
engine.ver = broswer.ver = RegExp.$1;
engine.konq = broswer.konq = parseFloat(engine.ver);
} else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
engine.ver = RegExp.$1;
engine.gecko = parseInt(engine.ver);
//是否是firefox浏览器
if (/firefox\/(\S+)/i.test(ua)){
broswer.ver = RegExp.$1;
broswer.firefox = parseFloat(broswer.ver);
}
**//如果这里没有检测到的firefox岂不是没有浏览器的版本信息了?**
} else if (/MSIE ([^;]+)/.test(ua)){
engine.ver = broswer.ver = RegExp.$1;
engine.ie = broswer.ie = parseFloat(engine.ver);
}
broswer.ie = engine.ie;
broswer.opera = engine.opera;
用Gecko
这內核的,除了ff以外,其他不管也可以吧,因為市佔太低
这兩句,是抄错了吧?
broswer.ie = engine.ie;
broswer.opera = engine.opera;