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

引入:


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


调试信息:

在getStaticResourceURL方法中:

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

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


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

我们看isFirefox的实现:


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

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

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

所以,这里isMozilla返回true.


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

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



总结:

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

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


你可能感兴趣的:(user,agent,浏览器信息)