浏览器类型判断。最可恶当属于360浏览器,之前能够经过内核返回的字符串断定是否包含"360"字样的方法来断定,html
如如下代码java
window.navigator.userAgent.indexOf('360')!=-1web
但360浏览器某次更新后,内核显示的字符串已经和IE浏览器是同样的了,致使没法判断是IE仍是360。后来看了下window.navigator的成员集合,发现了一些区别,下面给出判断代码。chrome
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <base > <title></title> <script> function bro(){ var is360 = false; var isIE = false; if (window.navigator.appName.indexOf("Microsoft") != -1){ isIE= true; } if(isIE&&(window.navigator.userProfile+'')=='null'){ is360 = true; } if(is360){ document.body.innerText = '360浏览器'; }else if(isIE){ document.body.innerText = 'IE浏览器'; } } </script> </head> <body onload="bro();"> </body> </html>
注意:加红字体必定不要忘记,要否则会不成功。浏览器
后来发现上面的代码不能用了,缘由在于如今360浏览器6.3版本,是跟Chrome浏览器内核同样了,不是和以前的IE内核,给了如下代码。安全
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <base > <title></title> <script> function bro(){ var is360 = false; var isIE = false; var isFirefox = false; var isCrome = false; var broName = ''; if(window.navigator.userAgent.indexOf('MSIE')!=-1&&window.navigator.appName.indexOf("Microsoft") != -1){ isIE = true; broName = 'IE'; } if(window.navigator.userAgent.indexOf('Firefox')!=-1){ isFirefox = true; broName = 'Firefox'; } if(window.navigator.userAgent.indexOf('Chrome')!=-1){ if(window.navigator.webkitPersistentStorage){ isCrome = true; broName = 'Chrome'; }else{ is360 = true; broName = '360'; } } document.getElementById('broType').value=broName; } </script> </head> <body onload="bro();"> <input type="text" id="broType" name="broType"> </body> </html>
如今发现上面的又不能用了,由于如今360的版本又变了,内核的方式采起了IE和谷歌,网上大多数都是采用navigator.userAgent来判断,下面对浏览器作了一些比较。app
谷歌: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36测试
360极速:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36字体
360安全:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36网站
可是,在有360网站下输出navigator.userAgent,能判断出360极速和360安全浏览器:
360极速:"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 QIHU 360EE"
360安全:"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 QIHU 360SE"
偶然间发现一个能够判断是360浏览器的mimeType(媒体类型),type: "application/vnd.chromium.remoting-viewer"
在360极速浏览器>帮助>关于360浏览器,弹出以下:通过测试,只有在360浏览器中才会有输出chromium这个标识,可是也不能100%肯定检测出的必定是360浏览器。
附上代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>浏览器检测</title> </head> <script> window.onload = function () { //application/vnd.chromium.remoting-viewer 可能为360特有 var is360 = _mime("type", "application/vnd.chromium.remoting-viewer"); if (isChrome() && is360) { alert("检测到是360浏览器"); } } //检测是不是谷歌内核(可排除360及谷歌之外的浏览器) function isChrome(){ var ua = navigator.userAgent.toLowerCase(); return ua.indexOf("chrome") > 1; } //测试mime function _mime(option, value) { var mimeTypes = navigator.mimeTypes; for (var mt in mimeTypes) { if (mimeTypes[mt][option] == value) { return true; } } return false; } </script> <body> </body> </html>
可是没法区分360安全浏览器和360极速浏览器。