JavaScript中的通用用户代理检测
由于不同浏览器实现JavaScript的方式,因此在JavaScript中检测用户代理可能很重要。有时,有必要创建逻辑以在Firefox中做一件事,而在IE中做另一件事。幸运的是,所有现代浏览器都支持navigator.userAgent属性,因此这是一个不错的开始。
由于可以在Opera中屏蔽您的用户代理,因此有必要首先检测该浏览器。实际上,有两种方法可以在Opera中隐藏用户代理。默认的用户代理如下:
Opera/9.23(WindowsNT5.1;U;en)
可以将Opera标识为Firefox或InternetExplorer。在这种情况下,Opera的版本会附加到用户代理字符串的末尾,因此仍然可以检测用户是否有Opera并采取相应的措施。
识别为IE
Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;en)Opera9.23
识别为Firefox
Mozilla/5.0(WindowsNT5.1;U;en;rv:1.8.0)Gecko/20060728Firefox/1.5.0Opera9.23
也可以将Opera屏蔽为Firefox或InternetExplorer。在这种情况下,Opera浏览器将完全隐藏,就JavaScript而言,它可以看到Firefox或InternetExplorer。
遮罩为IE
Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;en)
屏蔽为Firefox
Mozilla/5.0(WindowsNT5.1;U;en;rv:1.8.0)Gecko/20060728Firefox/1.5.0
要检测是否存在非屏蔽Opera,可以使用一个名为isOpera的布尔选项,该选项通过查找Opera这个词的任何实例来设置。
varisOpera=sUserAgent.indexOf("Opera")>-1;
要在打开遮罩的情况下检测Opera的存在,可以使用该window.opera对象。如果存在此选项,则可以假定用户正在运行Opera。
if(window.opera){ alert('opera!'); isOpera = true; }
接下来,您必须检测InternetExplorer的存在。为此,您需要查找单词“compatible”和“MSIE”,但仍要确保isOpera变量为false。
var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1 && !isOpera;
检测Safari的存在是相对简单的。Safari用户代理字符串如下所示。
Mozilla/5.0(Macintosh;U;PPCMacOSX;en)AppleWebKit/xx.x(KHTML,likeGecko)Safari/yy.y
因此,一个简单的测试即可确定用户代理中是否包含字符串“Apple”或“Safari”。
用户代理检测的另一种方法是查看可用的对象。例如,在Windows系统上使用InternetExplorer的任何人都可以使用该对象window.ActiveXObject。如果他们使用任何其他浏览器,则此对象将是未定义的。因此,使用typeof运算符对此进行测试。
if(typeofwindow.ActiveXObject!= "undefined"){ //用户正在使用IE }
当经过Opera掩盖用户代理时,这是一种检测正在使用的浏览器的更可靠的方法。最好只在需要时测试正确的对象,而不是为不同的浏览器编写不同版本的代码。