JavaScript 客戶端檢測

2021-08-03 17:38:44 字數 1609 閱讀 5900

能力檢測

最常用也最為人們廣泛接受的客戶端檢測形式是能力檢測(又稱特性檢測)。能力檢測的目標不是識別特定的瀏覽器,而是識別瀏覽器的能力。採用這種方式不必顧及特定的瀏覽器如何如何,只要確定瀏覽器支援特定的能力,就可以給出解決方案。

要理解能力檢測,首先必須要理解兩個重要的概念。第乙個概念就是先檢測達成目的的最常用的特性。舉個例子來說,先要檢測document.getelementbyid(),後檢測document.all。先檢查最常用的特性可以保證**最優化,因為在多數情況下都可以避免測試多個條件。第二個重要的概念就是必須測試實際要用到的特性,乙個特性不存在,不一定意味著另乙個特性也存在。

在可能的情況下,要盡量使用typeof進行能力檢測。檢測某個或幾個特性並不能確定瀏覽器。實際上,根據瀏覽器不同將能力組合起來是更可取的方式。如果你知道自己的應用程式需要使用某些特定的瀏覽器特性,那麼最好是一次性檢測所有相關特性,而不要分別檢測。

怪癖檢測

怪癖檢測的目標是識別瀏覽器的特殊行為。怪癖檢測是想要知道瀏覽器存在什麼缺陷(「怪癖」也就是bug)。這通常需要執行一小段**,以確定某一特性不能正常工作。一般來說,「怪癖」都是個別瀏覽器所獨有的,而且通常被歸為bug。在相關瀏覽器的新版本中,這些問題可能會也可能不會被修復。由於檢測「怪癖」涉及執行**,因此建議僅檢測那些對你有直接影響的「怪癖」,而且最好在指令碼一開始就執行此類檢測,以便盡早解決問題。

使用者**檢測

使用者**檢測通過使用者**字串來確定實際使用的瀏覽器。在客戶端,使用者**檢測一般被當作一種萬不得已才用的做法,其優先順序排在能力檢測和怪癖檢測之後。

提到與使用者**字串有關的爭議,就不得不提到電子欺騙,所謂的電子欺騙就是指瀏覽器通過在自己的使用者**字串加入一些錯誤或誤導性資訊,來達到欺騙伺服器的目的。

http規範(包括1.0和1.1版)明確規定,瀏覽器應該傳送簡短的使用者**字串,指明瀏覽器的名稱和版本號。rfc 2016(即http1.1協議規範)是這樣描述使用者**字串的:

「產品識別符號常用於通訊應用程式標識自身,由軟體名和版本組成。使用產品識別符號的大多數領域也允許列出作為應用程式主要部分的子產品,由空格分隔。按照慣例,產品要按照相應的重要程度依次列出,以便標識應用程式。」

上述規範進一步規定,使用者**字串應該以一組產品的形式給出,字串格式為:識別符號/產品版本號。但是,現實中的使用者**字串則絕對沒有如此簡單。不同的瀏覽器和同一瀏覽器的不同版本的使用者**字串的格式都有所不同。

考慮到歷史原因以及現代瀏覽器中使用者**字串的使用方式,通過使用者**字串來檢測特定的瀏覽器並不是一件輕鬆的事。因此,首先要確定的往往是你需要多麼具體的瀏覽器資訊。使用使用者**字串可以做如下檢測:

要做完這些檢測的話,需要的**量比較大,雖然有現成的**可以用,但是我們在前面已經強調過了,使用者**檢測是客戶端檢測的最後乙個選擇。只要可能,都應該優先採用能力檢測和怪癖檢測。使用者**檢測一般適用於下列情形。

(1)不能直接準確地使用能力檢測或怪癖檢測。例如,某些瀏覽器實現了為將來功能預留的存根函式。在這種情況下,僅測試相應的函式是否存在還得不到足夠的資訊。

(2)同一款瀏覽器在不同平台下具備不同的能力。這時候,可能就有必要確定瀏覽器位於哪個平台下。

(3)為了跟蹤分析等目的需要知道確切的瀏覽器。

客戶端檢測

在理想狀態下,我們會認為瀏覽器應該支援一組最常用的公共功能,但是現實時瀏覽器之間有存在差異以及特的 怪癖 quirk 因此客戶端檢測除了是一種補救措施之外,更是一種行之有效的開發策略。主要有以下三種客戶端檢測方法 1.能力檢測 在編寫 之前先檢測特定的瀏覽器的能力。例如,指令碼在呼叫某個函式之前,可...

客戶端檢測

一 客戶端檢測的原因 瀏覽器之間存在不同差別,通常需要根據不同的瀏覽器的能力分別編寫不同的 客戶端檢測除了是一種補救措施之外,更是一種行之有效的開發策略。客戶端檢測分為能力檢測 怪癖檢測 使用者 檢測。二 能力檢測 在編寫 之前先檢測特定的瀏覽器的能力,例如,指令碼在呼叫某個函式之前,可能要先檢測該...

JavaScript客戶端儲存

web應用允許使用瀏覽器提供的api實現將資料儲存在使用者的電腦上 客戶端儲存主要使用一下幾種方式 1 web儲存 相容ie在內的大部分瀏覽器 主要包含 localstorage 物件與 sessionstorage 物件,以鍵 值對的形式儲存。物件主要有一下幾個方法 1 getitem key 獲...