为什么SAPUI5应用程序初始化会调用SAPUI5设备检测API,即sap.ui.Device来检测当前SAPUI5应用程序运行的设备类型?可以查看我的文章:SAPUI5应用开发教程第34部分——SAPUI5应用基于设备类型页面适配功能(DeviceAdaptation)。本文介绍了设备检测API本身的工作原理。DeviceAPI所在的Device.js文件加载完成后,立即执行setOS方法:从OS结构体变量可以看出,SAPUI5支持以下操作系统的检测:AndroidiOSLinuxmacWindows我们使用浏览器的userAgent判断操作系统类型:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/97.0.4692.99Safari/537.36使用正则表达式匹配,如果找到Android字符串,则表示当前SAPUI5应用程序,在Android移动设备上运行。如果未检测到,请进入getDesktopOS分支。我使用的是Windows10操作系统,平台字段值为Win32:成功解析操作系统版本号为10:在DeviceAPI中为设备对象设置对应的os值:然后执行setBrowser设置对应浏览器标志:基于webkit和mozilla的浏览器类型检测是使用以下正则表达式完成的:varrwebkit=/(webkit)[\/]([\w.]+)/;varrmozilla=/(mozilla)(?:.*?rv:([\w.]+))?/;最后通过正则表达式结合userAgent检测到我在Windows10操作系统上使用的浏览器类型是Chrome:根据这个StackOverflow帖子,如何检测Chrome是否是使用blink渲染引擎的实现:给Device全局变量的support字段赋值:输入设备类型检测:首先检测是否是平板:varbTabletDetected=!!isTablet(自定义UA);从这里可以看出,SAPUI5判断一个设备是平板的逻辑是,如果设备的操作系统是windows或者mac或者linux,那么如果支持触摸操作,就认为是平板:从下图的代码中,我们终于找到了SAPUI5判断当前设备是手机的逻辑:如果设备支持触摸操作,并且不是平板电脑,那肯定是手机。检测设备是否支持触摸的逻辑:vardetectTouch=function(){return!!(('ontouchstart'inwindow)||(window.navigator.maxTouchPoints>0)||(window.DocumentTouch&&documentinstanceofwindow.DocumentTouch)||(window.TouchEvent&&Device.browser.firefox));};更多Jerry原创文章在这里:《王子熙》:
