2015-12-07 3 views
0

Это не работает при открытии браузера IE11, Safari OSX 10.11. Что не так?Javascript - Как мне получить все названия браузеров?

var browser = ''; 
var browserVersion = 0; 

if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    browser = 'Opera'; 
} else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { 
    browser = 'MSIE'; 
} else if (/Navigator[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    browser = 'Netscape'; 
} else if (/Chrome[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    browser = 'Chrome'; 
} else if (/Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    browser = 'Safari'; 
    /Version[\/\s](\d+\.\d+)/.test(navigator.userAgent); 
    browserVersion = new Number(RegExp.$1); 
} else if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { 
    browser = 'Firefox'; 
} 
if(browserVersion === 0){ 
    browserVersion = parseFloat(new Number(RegExp.$1)); 
} 
alert(browser + "*" + browserVersion); 

Выходы: * 0 только

+0

Почему вы хотите это сделать? Есть много, много браузеров, которые выше не будут идентифицированы. Если это просто интересно, есть базы данных строк пользовательских агентов (например, [* user-agents.org *] (http://www.user-agents.org), [* useragentstring.org *] (http: // www.useragentstring.com/pages/All/)). – RobG

ответ

1

Если вам нужно только имя браузера вы можете попробовать использовать эту функцию, это должно работать на последней IE и Safari:

var BrowserDetect = function() { 
     var nav = window.navigator, 
     ua = window.navigator.userAgent.toLowerCase(); 
     // Detect browsers (only the ones that have some kind of quirk we need to work around) 
     if ((nav.appName.toLowerCase().indexOf("microsoft") != -1 || nav.appName.toLowerCase().match(/trident/gi) !== null)) 
      return "IE"; 
     if (ua.match(/chrome/gi) !== null) 
      return "Chrome"; 
     if (ua.match(/firefox/gi) !== null) 
      return "Firefox"; 
     if (ua.match(/safari/gi) !== null) 
      return "Safari"; 
     if (ua.match(/webkit/gi) !== null) 
      return "Webkit"; 
     if (ua.match(/gecko/gi) !== null) 
      return "Gecko"; 
     if (ua.match(/opera/gi) !== null) 
      return "Opera"; 
     // If any case miss we will return null 
     return null 
    }; 
2

IE11 больше не сообщает, как MSIE, в соответствии с этим списком изменений, это намеренно, чтобы избежать неправильного обнаружения.

Что вы можете сделать, если вы действительно хотите знать, что это IE является выявление Trident/строку в пользовательском агенте, если navigator.appName возвращает Netscape, что-то вроде (непроверенная);

How to detect IE11?

Вот немного больше от Microsoft:

https://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx#TriToken

Trident/7,0 IE11

Trident/6.0 Internet Explorer 10

Trident/5,0 я Explorer 9 это интернет

Trident/4.0 Internet Explorer 8

На сафари тема, посмотрите на их последней строки UserAgent, это не имеет ver.ver в нем, так что вы регулярное выражение не будет работать на этом:

Safari 7.0.3 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, как Gecko) Version/7.0.3 Safari/7046A194A

Смежные вопросы