Discuz! 经典浏览器识别代码解析

作者:竹影时间:2026-10-25 08:20:26浏览:428

本文分析 Discuz! 源码中一段经典的浏览器验证 JavaScript 代码。通过检测 navigator.userAgent 及特定浏览器独有的对象或方法(如 ActiveXObject、getBoxObjectFor、openDatabase 等),代码能够区分 IE、Firefox、Chrome、Opera 和 Safari,并将结果存入 BROWSER 对象。该实现展示了早期 Web 开发中常见的特性检测技巧。

Discuz! 浏览器验证代码分析

在研究 Discuz! 的源代码时,注意到其中包含一段用于浏览器验证的代码,该实现方式颇具代表性:


具体代码实现如下:

 
var BROWSER = {};
var USERAGENT = navigator.userAgent.toLowerCase();
alert(USERAGENT);
BROWSER.ie = window.ActiveXObject && USERAGENT.indexOf('msie') != -1 && USERAGENT.substr(USERAGENT.indexOf('msie') + 5, 3);
BROWSER.firefox = document.getBoxObjectFor && USERAGENT.indexOf('firefox') != -1 && USERAGENT.substr(USERAGENT.indexOf('firefox') + 8, 3);
BROWSER.chrome = window.MessageEvent && !document.getBoxObjectFor && USERAGENT.indexOf('chrome') != -1 && USERAGENT.substr(USERAGENT.indexOf('chrome') + 7, 10);
BROWSER.opera = window.opera && opera.version();
BROWSER.safari = window.openDatabase && USERAGENT.indexOf('safari') != -1 && USERAGENT.substr(USERAGENT.indexOf('safari') + 7, 8);
BROWSER.other = !BROWSER.ie && !BROWSER.firefox && !BROWSER.chrome && !BROWSER.opera && !BROWSER.safari;
BROWSER.firefox = BROWSER.chrome ? 1 : BROWSER.firefox;
作者最新文章