การตรวจจับความสามารถ
ความสามารถในการตรวจจับเบราว์เซอร์เฉพาะก่อนเขียนโค้ด ตัวอย่างเช่นสคริปต์อาจต้องตรวจจับการมีอยู่ของการชำระเงินดาวน์สำหรับฟังก์ชั่นก่อนที่จะเรียกมัน วิธีการตรวจจับนี้ทำให้นักพัฒนาไม่ได้พิจารณาประเภทและรุ่นเบราว์เซอร์ที่เฉพาะเจาะจงทำให้พวกเขาสามารถมุ่งเน้นไปที่ความสามารถที่สอดคล้องกันหรือไม่ การตรวจจับความสามารถไม่สามารถตรวจจับเบราว์เซอร์และรุ่นเฉพาะได้อย่างถูกต้อง
การตรวจสอบการเล่นโวหาร
นิสัยใจคอเป็นข้อบกพร่องในการใช้เบราว์เซอร์ ตัวอย่างเช่นมีการเล่นโวหารใน WebKits ต้นนั่นคือมันจะส่งคืนแอตทริบิวต์ที่ซ่อนอยู่ในลูป for-in การตรวจจับ Quirk มักจะเกี่ยวข้องกับการเรียกใช้รหัสชิ้นหนึ่งแล้วพิจารณาว่าเบราว์เซอร์มีการเล่นโวหารหรือไม่ เนื่องจากการตรวจจับ Quirk ไม่สามารถตรวจจับเบราว์เซอร์และเวอร์ชันเฉพาะได้อย่างถูกต้อง
การตรวจจับตัวแทนผู้ใช้
ระบุเบราว์เซอร์โดยตรวจจับสตริงตัวแทนผู้ใช้ สตริงตัวแทนผู้ใช้มีข้อมูลที่เกี่ยวข้องกับเบราว์เซอร์จำนวนมากรวมถึงเบราว์เซอร์แพลตฟอร์มระบบปฏิบัติการและรุ่นเบราว์เซอร์ สตริงตัวแทนผู้ใช้มีประวัติการพัฒนาที่สำคัญ ในช่วงเวลานี้มุมมองผู้ให้บริการเบราว์เซอร์จะเพิ่มข้อมูลการหลอกลวงบางอย่างให้กับสตริงตัวแทนผู้ใช้และหลอกลวงเว็บไซต์ในรายละเอียดเบราว์เซอร์ของตัวเองเป็นเบราว์เซอร์อื่น การตรวจจับตัวแทนผู้ใช้ต้องใช้ทักษะพิเศษโดยเฉพาะอย่างยิ่งโปรดทราบว่า Opera ซ่อนสตริงตัวแทนผู้ใช้ ถึงกระนั้นเอ็นจิ้นเรนเดอร์ที่ใช้โดยเบราว์เซอร์และแพลตฟอร์มที่ใช้โดยอุปกรณ์มือถือและระบบเกมยังสามารถตรวจจับได้ผ่านสตริงตัวแทนผู้ใช้
ในระหว่างการร้องขอ HTTP แต่ละครั้งสตริงตัวแทนผู้ใช้จะถูกส่งเป็นส่วนหัวการตอบกลับและสตริงสามารถเข้าถึงได้ผ่านคุณสมบัติ Navigator.useragent ของ JavaScript ทางด้านเซิร์ฟเวอร์มันเป็นวิธีปฏิบัติทั่วไปและเป็นที่ยอมรับอย่างกว้างขวางเพื่อกำหนดเบราว์เซอร์ที่ใช้โดยการตรวจจับสตริงตัวแทนผู้ใช้ ในด้านไคลเอนต์การตรวจจับตัวแทนผู้ใช้โดยทั่วไปถือว่าเป็นทางเลือกสุดท้ายโดยมีลำดับความสำคัญหลังจากการตรวจจับความสามารถและการตรวจจับการเล่นโวหาร
var client = function () {// engine engine var engine = {ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, // หมายเลขเวอร์ชันเต็ม: null}; // เบราว์เซอร์ var เบราว์เซอร์ = {// หลักเบราว์เซอร์เช่น: 0, firefox: 0, safari: 0, konq: 0, โอเปร่า: 0, chrome: 0, // หมายเลขเวอร์ชันเฉพาะ: null}; // ตรวจจับเอ็นจิ้นเรนเดอร์และเบราว์เซอร์ var ua = navigator.useragent; if (window.opera) {engine.ver = browser.ver = window.opera.version (); engine.opera = browser.opera = parsefloat (engine.ver); } else ถ้า (/applewebkit//(/s+)/.test(ua)) {engine.ver = regexp ["$ 1"]; engine.webkit = parsefloat (engine.ver); // ตรวจสอบว่าเป็น Chrome หรือ Safari ถ้า (/chrome//(/s+)/.test(ua)) {browser.ver = regexp ["$ 1"]; เบราว์เซอร์ chrome = parsefloat (engine.ver); } อื่นถ้า (/version//(s+)/.test(ua)) {browser.ver = regexp ["$ 1"]; Browser.safari = parsefloat (browser.ver); } else {// โดยประมาณกำหนดหมายเลขเวอร์ชัน var safariversion = 1; if (engine.webkit <100) {safariversion = 1; } อื่นถ้า (engine.webkit <312) {safariversion = 1.2; } อื่นถ้า (engine.webkit <412) {safariversion = 1.3; } else {safariversion = 2; } browser.safari = browser.ver = safariversion; }} อื่นถ้า (/khtml//(S+)/.test(ua) || /konqueror//( [[idy^; engine.khtml = browser.kong = parsefloat (engine.ver); } อื่นถ้า (/rv: ([^/)]+)/) gecko /// d {8}/. ทดสอบ (ua)) {engine.ver = regexp ["$ 1"]; engine.gecko = parsefloat (engine.ver); // ตรวจสอบว่าเป็น firefox ถ้า (/firefox//(S+)/.test(ua)) {browser.ver = regexp ["$ 1"]; เบราว์เซอร์. firefox = parsefloat (browser.ver); }} อื่นถ้า (/msie ([^;]+)/. ทดสอบ (ua)) {engine.ver = browser.ver = regexp ["$ 1"]; engine.ie = browser.ie = parsefloat (engine.ver); } // ตรวจจับเบราว์เซอร์เบราว์เซอร์ = engine.ie; เบราว์เซอร์. opera = engine.opera; // ส่งคืนวัตถุเหล่านี้ส่งคืน {เครื่องยนต์: เครื่องยนต์, เบราว์เซอร์: เบราว์เซอร์}} (); console.log (client.engine); console.log (client.browser);Tangram ตรวจจับซอร์สโค้ดเบราว์เซอร์
/*** ประกาศแพ็คเกจ baidu*/var baidu = baidu || {เวอร์ชัน: "1-3-2"}; // Meizz 20100513 อัปเกรด GUID เป็น /x06baidu.guid = "$ baidu $"; // เสนอ GUID เพื่อป้องกันการดัดแปลงหน้าต่าง [ไม่ได้กำหนด] 20100504 Berg/*** Meizz 2010/02/04* ข้อมูลที่ไม่เฉพาะเจาะจง* หน้าต่าง [baidu.guid] || {};/*** ประกาศแพ็คเกจ baidu.browser*/baidu.browser = baidu.browser || {};/** * ตรวจสอบว่า isgecko */baidu.browser.isgecko = /gecko/i.test(navigator.useragent) &&!/ชอบ gecko/i.test (navigator.useragent); /webkit/i.test(navigator.useragent) ((/(/d+/./d)(/./d)?/s+safari/i.test(navigator.useragent) &&!/chrome/i.test (navigator.useragent))) {baidu.browser.safari = parsefloat (regexp ['/x241) เบราว์เซอร์*/ถ้า (/opera//(/d+/./d)/i.test(navigator.useragent)) {baidu.browser.opera = parsefloat (regexp ['/x241']); (/chrome//(/d+/./d)/i.test(navigator.useragent)) {baidu.browser.chrome = parsefloat (regexp ['/x241']);}/*** พิจารณาว่ามันเป็นเบราว์เซอร์ IE*/if (/msie baidu.ie = baidu.browser.ie = document.documentmode || parsefloat (regexp ['/x241']);}/*** ตรวจสอบว่าเป็นเบราว์เซอร์ firefox*/ถ้า (/firefox//(/d+/./d)/i.test(navigator.useragent)) // '/x241' เป็นสัญกรณ์ octal '/x24' อักขระที่สอดคล้องกัน '$' ดังนั้น '/x241' จะเทียบเท่ากับ '$ 1'}