if(u_agent.indexOf("Firefox")>-1) 如果把 Firefox 改成Safari,浏览器名就会变成了Firefox而不是Chorme 了。像这种浏览器版本信息中字符串值有重合的,for循环返回的浏览器名还准确吗?
navigator的信息可以很容易地被用户修改,所以JavaScript读取的值不一定是正确的。初学者为了针对不同浏览器编写不同的代码,喜欢用if判断浏览器版本,例如:
var width;
if (getIEVersion(navigator.userAgent) < 9) { width = document.body.clientWidth;
} else { width = window.innerWidth;
}
但这样既可能判断不准确,也很难维护代码。正确的方法是充分利用JavaScript对不存在属性返回undefined的特性,直接用短路运算符||计算:
var width = window.innerWidth || document.body.clientWidth;
首先,问题的初衷是为了知道是那种浏览器。所以,为什么会去改动返回的内容呢?(没意义),
然后不同浏览器返回的结果是不一样的,为什么GOOGLE浏览器返回的会有safi的标识呢?
就是一个浏览器标识而已。是因为chrome模仿苹果WebKit标识让网站识别以获得访问更加精湛的页面。虽然带有apple,但苹果本身份额很小。chrome里面的APPLEWebKit标识一直没去掉。WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。
不同浏览器返回的结果如下(所以返回的结果判断还是准确的):
IE(8-10)
u_agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Chrome
u_agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Chrome(115浏览器,内核也是Chrome的)
u_agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36
Safari
u_agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2