前端 獲取手機及設備類型

来源:https://www.cnblogs.com/kybs0/archive/2020/07/07/13238110.html
-Advertisement-
Play Games

上一篇 前端 瀏覽器所在客戶端信息,有瀏覽器信息後,以下是區分手機的詳細類型 雖然沒難度,但是記錄下來,方便後續無腦複製: 蘋果APP類型 1 // iOS 2 isIPhone = (userAgent: string) => /iphone/i.test(userAgent); 3 isIPod ...


上一篇 前端 瀏覽器所在客戶端信息,有瀏覽器信息後,以下是區分手機的詳細類型

雖然沒難度,但是記錄下來,方便後續無腦複製:

蘋果APP類型

1   // iOS
2   isIPhone = (userAgent: string) => /iphone/i.test(userAgent);
3   isIPod = (userAgent: string) => /ipod/i.test(userAgent);
4   isIPad = (userAgent: string) => /iPad/i.test(userAgent);
5   public isIOS = (userAgent: string) => this.isIPhone(userAgent) || this.isIPod(userAgent) || this.isIPad(userAgent);

註:最新ipad pro版本是MAC系統,無法通過瀏覽器信息來區分ipad pro與MAC,詳細瀏覽器信息:

 1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15 

已經有很多開發吐槽過,蘋果的這個BUG:https://developer.apple.com/forums/thread/119186

所以,除非蘋果修複這個設計問題,否則我們只能繞道規避。

目前大家區分ipad pro與MAC的方法是,判斷設備是否支持觸摸

1  isIPadPro = (userAgent: string) => /macintosh/i.test(userAgent) && navigator.maxTouchPoints > 1;

參考鏈接:

https://stackoverflow.com/questions/57776001/how-to-detect-ipad-pro-as-ipad-using-javascript

https://stackoverflow.com/questions/57765958/how-to-detect-ipad-and-ipad-os-version-in-ios-13-and-up

安卓類型

大部分安卓的瀏覽器信息都有android欄位

1   // android
2   public isAndroid = (userAgent: string) => /android/i.test(userAgent);

微信瀏覽器

1   // 微信
2   public isWechat = (userAgent: string) => /micromessenger/i.test(userAgent);
3   public isAppWechat = (userAgent: string) => this.isWechat(userAgent) && !/windowswechat/i.test(userAgent);

是否是手機端

添加mobile作為補充,當然直接使用mobile問題也不大

1   // 手機
2   public isMobile = (userAgent: string) => this.isAndroid(userAgent) || this.isIOS(userAgent) || /mobile/i.test(userAgent);

userAgent的欄位介紹,可參考 其它博客瀏覽器的常見User Agent 各欄位的解釋

完整代碼(可直接複製,不謝):

 1 declare type UserAgentProvider = {
 2   isIOS: (userAgent: string) => void;
 3   isAndroid: (userAgent: string) => void;
 4   isMobile: (userAgent: string) => void;
 5   isWechat: (userAgent: string) => void;
 6 };
 7 
 8 class Index implements UserAgentProvider {
 9   // iOS
10   isIPhone = (userAgent: string) => /iphone/i.test(userAgent);
11   isIPod = (userAgent: string) => /ipod/i.test(userAgent);
12   isIPad = (userAgent: string) => /iPad/i.test(userAgent) || /Macintosh/i.test(userAgent);
13   isIPadPro = (userAgent: string) => /macintosh/i.test(userAgent) && navigator.maxTouchPoints > 1;
14   public isIOS = (userAgent: string) =>
15     this.isIPhone(userAgent) ||
16     this.isIPod(userAgent) ||
17     this.isIPad(userAgent)||
18     this.isIPadPro(userAgent);
19 
20   // android
21   public isAndroid = (userAgent: string) => /android/i.test(userAgent);
22 
23   // 手機
24   public isMobile = (userAgent: string) => this.isAndroid(userAgent) || this.isIOS(userAgent) || /mobile/i.test(userAgent);
25 
26   // 微信
27   public isWechat = (userAgent: string) => /micromessenger/i.test(userAgent);
28   public isAppWechat = (userAgent: string) => this.isWechat(userAgent) && !/windowswechat/i.test(userAgent);
29 }
30 
31 export default new Index();
View Code

 

關鍵字:iPadpro MAC userAgent、區分iPad pro與MAC


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 只能在render函數裡面使用JSX嗎 當然不是,你可以定義method,然後在method裡面返回JSX,然後在render函數裡面調用這個方法,不僅如此,JSX還可以直接賦值給變數,比如下麵這段代碼 methods: { $_renderFooter() { return ( <div> <El ...
  • 是時候使用JSX代替createElement了 接著上面的講,當我們看到上面用createElement去實現組件,太麻煩了,別說工作效率提高了,就是那些嵌套可以嵌套正確就很贊了,所以我們需要用JSX去簡化整個邏輯。當年我做項目的時候就遇到過這樣的情況,嵌套太多,自己都快搞不明白了,在崩潰的邊緣。 ...
  • HTML——超文本標記語言 HTMl裡面有標簽,標簽又分為單標簽和雙標簽,也分為行級元素和塊級元素 標簽是用<>包裹起來的,而且必須要有<>,否則會直接顯示在瀏覽器上面哦 現在介紹一下常用標簽 我們還要區分行級元素和塊級元素,塊級元素的特點是獨占一行,可以設置寬高,行級元素不能設置寬高,如果需要設置 ...
  • 學習JSX,先瞭解一下createElement 提到JSX,不可避免的就要提到createElement,當你看完本節,你會發現,奇怪的知識又增多了。ok,我們接著上一部分繼續講。這一次的準備工作是瞭解createElement。 從Vue編譯後的代碼看createElement 你是否看過寫的V ...
  • 1.前景怎麼樣? web前端人才需求還會持續增加 據國內權威數據統計,未來五年,我國信息化人才總需求量高達1500萬—2000萬人。其中“網路工程”“UI設計”“web前端”等人才的缺口最為突出,所以2020年web前端的市場需求還是很大的。更有甚者,目前不僅大型互聯網公司擬相繼成立了專屬的web ...
  • 編寫如下的函數: function drawHexagon(x,y,L) { ctx.beginPath(); ctx.moveTo(x-sqrt3/2*L,y-L/2); ctx.lineTo(x-sqrt3/2*L,y+L/2); ctx.lineTo(x,y+L); ctx.lineTo(x+ ...
  • 作者:騰訊有數 - TabPan Taro 引入了騰訊有數的微信小程式無痕埋點能力,為 Taro 的開發者提供真·零開發的 8 大無痕埋點能力以及自定義埋點能力,包含小程式啟動、顯示、隱藏、頁面瀏覽、頁面離開、分享、下拉刷新、上拉觸底等八大自動化埋點能力以及搜索、商品歸因等定製化埋點,以及經營分析、 ...
  • 一、畫折線圖需要有如下準備如下: 1、繪製網格 2、繪製坐標系 3、繪製點 4、點連線就成了折線圖 二、繪製網格 1、確認網格(每個格子)的大小 2、確認X軸方向有多少條橫線 3、確認Y軸方向有多少條豎線 4、遍歷畫出來 <!DOCTYPE html> <html lang="en"> <head> ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...