Liferay 如何获取当前浏览器的类型

简介:

引入:


前文中提到当访问资源文件时候,比如某些css,js时候,它会去调用PortalImpl的getStaticResourceURL方法给资源文件附加各个参数,其中对于browserId参数会通过BrowserSnifferUtil.getBrowserId(request)来获取。 我们这例子就是对比各个浏览器,来看下不同浏览器对应的browserId是什么,以及通过如何方式来获取浏览器信息的,其实估计你猜也猜到了,通过user agent。正确。这里就是用来验证我们猜想的。


调试信息:

在getStaticResourceURL方法中:

092711510.png

它调用BrowserSnifferUtil的getBrowserId方法,它最终会调用BrowserSnifferImpl的getBrowserId方法。

093040106.png

从这里可以看出,逻辑非常简单,如果是ie浏览器,那么就返回字符串"ie",如果是火狐浏览器,就返回字符串"firefox",如果是其他浏览器比如Chrome,那么就返回字符串"other".


那么,如何判断浏览器的类型呢?比如调用isFirebox(request)时候,如何返回true或者false呢?

我们看isFirefox的实现:

093419365.png


这里可以看到,140行,它先判断是否是Mozilla产品,判断依据,就是userAgent中是否有mozilla字样或者webkit字样并且不包含compatible字样:

因为所有浏览器厂商都提供了user agent的支持,所以他们会附加上user agent,比如我刚才的请求是火狐发出的,它的user agent会包在http请求头中:

094352358.png

所以getUserAgent(request)返回一样的user agent信息,见debug的变量栏的userAgent

094214728.png

所以,这里isMozilla返回true.


然后,它会在第146-148行看这个user agent中是否包含firefox的一些alias,如果包含任意一个,则返回true.这个alias是

094801774.png

因为我们的useragent中包含firefox字样,而这个在_FIREFOX_ALIASES中,所以返回 true .



总结:

(1)所以我们可以看到,在拼接浏览器类型参数时候,如果是ie或者firefox,那么会分别返回browserId=ie或者browserId=firefox,如果是其他浏览器则会返回browserId=others

(2)判断浏览器类型都是通过读取分析user agent信息来完成的,这个信息被所有浏览器支持并且会附加到 http 请求头中。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1284724,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
Web App开发 JavaScript
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
858 0
|
Web App开发 JavaScript 前端开发
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
104 0
|
前端开发 JavaScript 中间件
Vue 2.x折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
这个需求非常常见,分享出去的页面的有时候在手机访问,有时候别人是PC打开的; 若是不是共享同一个页面的情况,就需要拦截跳转了; 当然你要共享同一个页面也可以(放大化到PC也需要添加某些CSS,也需判断设备)
275 1
|
Web App开发 前端开发 JavaScript
好程序员web前端培训分享JS检查浏览器类型和版本
好程序员web前端培训分享JS检查浏览器类型和版本,先取得Navigator对象的userAgent属性的小写信息,之后根据正则表达式判断赋值。 var Sys = {};var ua = navigator.
1528 0
|
Web App开发 iOS开发 Windows
为什么浏览器User-agent(浏览器类型)总是有Mozilla字样?
你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样? Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.
1873 0
|
Web App开发 JavaScript iOS开发

热门文章

最新文章