SAP UI5 裝置型別檢測 Device API 的工作原理
為什麼 SAP UI5 應用初始化時,要呼叫 SAP UI5 裝置檢測 API,即 sap.ui.Device
來檢測運行當前 SAP UI5 應用的裝置型別?
可以檢視我這篇文章:SAP UI5 應用開發教程之三十四 - SAP UI5 應用基於裝置型別的頁面適配功能(Device Adaptation)。
本文介紹該裝置檢測 API 本身的工作原理。
Device API 所在的 Device.js 檔案被載入後,立即執行 setOS
方法:
從 OS
結構變數可以看出,SAP UI5 支援下列幾種作業系統的檢測:
- Android
- iOS
- Linux
- mac
- Windows
我們通過瀏覽器的 userAgent
使用正則表示式匹配,如果發現有 Android 字串,則說明當前的 SAP UI5 應用,執行在 Android 移動裝置上。
如果沒有檢測到,進入 getDesktopOS
分支。
我用的是 Windows10 作業系統,platform 欄位值為 Win32
:
成功解析出作業系統的版本號為 10:
給 Device API 裡的 device 物件設定對應的 os 值:
然後執行 setBrowser
設定瀏覽器對應的 flag:
基於 webkit
和 mozilla
的瀏覽器型別檢測,使用下面的正則表示式完成:
var rwebkit = /(webkit)[ \/]([\w.]+)/;
var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;
最後仍然通過正則表示式結合 userAgent
,檢測出我在 Windows10 作業系統上使用的瀏覽器型別為 Chrome
:
根據這個 StackOverflow 帖子 提到的如何檢測 Chrome 是否使用了 blink
渲染引擎的實現:
給 Device 全域性變數的 support 欄位賦值:
進入裝置型別檢測:
首先檢測是否是 tablet
:
var bTabletDetected = !!isTablet(customUA);
從這裡能夠看出,SAP UI5 判斷一個裝置是 tablet
的邏輯為,如果該裝置的作業系統是 windows 或者 mac 或者 Linux,那麼如果它支援 touch
操作,就被看成是 tablet
:
從下圖程式碼,我們終於找到了 SAP UI5 判定當前 device 是 phone
的邏輯:如果裝置支援 touch
操作並且不是 tablet
,那麼一定是 phone
.
而檢測一臺裝置是否支援 touch 的邏輯:
var detectTouch = function () {
return !!(('ontouchstart' in window)
|| (window.navigator.maxTouchPoints > 0)
|| (window.DocumentTouch && document instanceof window.DocumentTouch)
|| (window.TouchEvent && Device.browser.firefox));
};
更多Jerry的原創文章,盡在:"汪子熙":