1. 程式人生 > 其它 >SAP UI5 裝置型別檢測 Device API 的工作原理

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

來判斷作業系統型別:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36

使用正則表示式匹配,如果發現有 Android 字串,則說明當前的 SAP UI5 應用,執行在 Android 移動裝置上。

如果沒有檢測到,進入 getDesktopOS 分支。

我用的是 Windows10 作業系統,platform 欄位值為 Win32:

成功解析出作業系統的版本號為 10:

給 Device API 裡的 device 物件設定對應的 os 值:

然後執行 setBrowser 設定瀏覽器對應的 flag:

基於 webkitmozilla 的瀏覽器型別檢測,使用下面的正則表示式完成:

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的原創文章,盡在:"汪子熙":