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 请求头中。





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1284724,如需转载请自行联系原作者
目录
相关文章
|
Web App开发 前端开发
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
Chrome 浏览器插件 V3 版本 Manifest.json 文件中 Action 的类型(Types)、方法(Methods)和事件(Events)的属性和参数解析
501 0
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
1133 1
|
前端开发 JavaScript 中间件
Vue 2.x折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
这个需求非常常见,分享出去的页面的有时候在手机访问,有时候别人是PC打开的; 若是不是共享同一个页面的情况,就需要拦截跳转了; 当然你要共享同一个页面也可以(放大化到PC也需要添加某些CSS,也需判断设备)
652 88
|
Web App开发 JavaScript
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
JS 获取当前浏览器类型(IE、Chrome、Edge、Firefox、Opera、UC、QQ)
1697 0
|
Web App开发 JavaScript 前端开发
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
学习Array类型看这一篇就够了(Array类型特点,Array原型方法,浏览器sort底层实现,深浅拷贝)
446 0
|
Web App开发 前端开发 JavaScript
好程序员web前端培训分享JS检查浏览器类型和版本
好程序员web前端培训分享JS检查浏览器类型和版本,先取得Navigator对象的userAgent属性的小写信息,之后根据正则表达式判断赋值。 var Sys = {};var ua = navigator.
1648 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.
2211 0