Як виявити версію браузера та операційну систему за допомогою JavaScript?


113

Я намагався використовувати код нижче, але він відображає результати лише в Chrome і Mozilla, які не працюють в IE6.

<div id="example"></div>

<script type="text/javascript">

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";

document.getElementById("example").innerHTML=txt;

</script>

Вихід:

Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0

Мені потрібно отримати лише версію "Firefox / 12.0".


3
quirksmode.org/js/detect.html перевірте це, як тільки це може вам допомогти ..
Jalpesh Patel

Додаткові відповіді можна знайти на цей та майже цей «майже» мандрівник
Маттайс Весселс

Перевірте мою відповідь за цим посиланням ( stackoverflow.com/questions/9847580/… )
Малькі Мохамед

Відповіді:


167

Виявлення реквізитів браузера:

var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera, the true version is after "Opera" or after "Version"
if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf("Version"))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'<br>'
 +'Full version  = '+fullVersion+'<br>'
 +'Major version = '+majorVersion+'<br>'
 +'navigator.appName = '+navigator.appName+'<br>'
 +'navigator.userAgent = '+navigator.userAgent+'<br>'
)

Джерело JavaScript: ім'я браузера .
Див. JSFiddle, щоб виявити деталі веб-переглядача .

Виявлення ОС:

// This script sets OSName variable as follows:
// "Windows"    for all versions of Windows
// "MacOS"      for all versions of Macintosh OS
// "Linux"      for all versions of Linux
// "UNIX"       for all other UNIX flavors 
// "Unknown OS" indicates failure to detect the OS

var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";

document.write('Your OS: '+OSName);

джерело JavaScript: виявлення ОС .
Див. JSFiddle, щоб виявити деталі ОС .


1
Чи знаєте ви, де я міг знайти всі можливі значення appVersion? Ну всі можливі значення ОС, які використовує appVersion?
Джон Одом

3
@JohnOdom Нові системи (наприклад, майбутня коробка Steam), ймовірно, мають власні назви; і існуючі системи можуть змінити свої назви або скорочення. Ви ніколи не будете в курсі останніх днів, якщо не будете використовувати якусь глобальну базу даних для отримання цієї інформації; оскільки це повністю фірмові. Можливо, колись Google, W3 тощо запропонують API для масового використання та оприлюднить усі різні назви системи та їхні стосунки, які вони збирають у своїх користувачів.
Домі

1
verOffset = nAgt.indexOf ("Opera"))! = - 1. Це не буде працювати для Opera 20 і вище.
parth.hirpara

2
Неможливо виявити Edge.
Мохан Сінгх

1
Цей Javascript застарів. Повідомляє Edge та IE 11 як "Netscape 5". Запропонуйте використовувати підтриману бібліотеку для такої функції, як github.com/faisalman/ua-parser-js
James Boutcher

20

Мені сумно сказати: Нам цього не пощастило.

Я хотів би віднести вас до автора WhichBrowser : Усі брешуть .

В основному, жоден браузер не є чесним. Незалежно від того, використовуєте ви Chrome чи IE, вони обидва скажуть вам, що вони "Mozilla Netscape" із підтримкою Gecko та Safari. Спробуйте самостійно будь-яку із загадок, що летять навколо у цій темі:

скрипка hims056

Гарихаранська скрипка

або будь-який інший ... Спробуйте це з Chrome (який може все-таки досягти успіху), потім спробуйте його з останньою версією IE, і ви заплачете. Звичайно, є евристика, щоб все було в порядку, але буде важко зрозуміти всі крайові справи, і вони, швидше за все, не працюватимуть вже через рік.

Візьміть свій код, наприклад:

<div id="example"></div>
<script type="text/javascript">
txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";
document.getElementById("example").innerHTML=txt;
</script>

Chrome каже:

CodeName браузера: Mozilla

Назва браузера: Netscape

Версія браузера: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, як і Gecko) Chrome / 40.0.2214.115 Safari / 537.36

Файли cookie увімкнено: вірно

Платформа: Win32

Заголовок користувача-агента: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, як і Gecko) Chrome / 40.0.2214.115 Safari / 537.36

IE каже:

CodeName браузера: Mozilla

Назва браузера: Netscape

Версія браузера: 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4 .0E; InfoPath.3; rv: 11.0) як Gecko

Файли cookie увімкнено: вірно

Платформа: Win32

Заголовок користувача-агента: Mozilla / 5.0 (Windows NT 6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4. 0C; .NET4.0E; InfoPath.3; rv: 11.0), як Gecko

Принаймні у Chrome все ще є рядок, що містить "Chrome" з точним номером версії. Але для IE ви повинні екстраполювати з речей, які він підтримує, щоб насправді розібратися (хто ще похвалиться, що вони підтримують .NETабо Media Center: P), а потім зіставити його з rv:самим кінцем, щоб отримати номер версії. Звичайно, навіть така складна евристика може, швидше за все, вийти з ладу, як тільки з'явиться IE 12 (або як вони цього хочуть назвати).


2
Показ браузера Chrome для Opera.
Раджкігор Саху

деякі з цих властивостей "зберігаються для зворотної сумісності", наприклад, усі браузери повернуть "Netscape" для navigator.appNamedeveloper.mozilla.org/en-US/docs/Web/API/NavigatorID
Philipp

18

Для цього існує бібліотека: https://github.com/bestiejs/platform.js#readme

Тоді ви можете використовувати це таким чином

// example 1
platform.os; // 'Windows Server 2008 R2 / 7 x64'

// example 2 on an iPad
platform.os; // 'iOS 5.0'

// you can also access on the browser and some other properties
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'

// or use the description to put all together
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'

1
Зауважте, що з усіх посилань на бібліотеки github у відповідях тут ця бібліотека здається найсучаснішою (Написання у травні 2018 року, з останньою
комісією

12

Для виявлення операційної системи за допомогою JavaScript краще використовувати navigator.userAgent замість navigator.appVersion

{
  var OSName = "Unknown OS";
  if (navigator.userAgent.indexOf("Win") != -1) OSName = "Windows";
  if (navigator.userAgent.indexOf("Mac") != -1) OSName = "Macintosh";
  if (navigator.userAgent.indexOf("Linux") != -1) OSName = "Linux";
  if (navigator.userAgent.indexOf("Android") != -1) OSName = "Android";
  if (navigator.userAgent.indexOf("like Mac") != -1) OSName = "iOS";
  console.log('Your OS: ' + OSName);
}


1
Оголошення. Крім того, було б дуже корисно, якщо ви можете пояснити, чому саме так краще :) Також, здається, "UNIX / X11" пропущено.
System Rebooter

@SystemsRebooter Дякую за коментар, ви можете додати їх як інші.
Нісал Еду

1
чудова відповідь, це було дуже корисно
Джеремі Бадер

9

Сценарій PPK є владою для подібних речей, як сказав @Jalpesh, це може вказати на правильний шлях

var wn = window.navigator,
        platform = wn.platform.toString().toLowerCase(),
        userAgent = wn.userAgent.toLowerCase(),
        storedName;

// ie
    if (userAgent.indexOf('msie',0) !== -1) {
        browserName = 'ie';
        os = 'win';
        storedName = userAgent.match(/msie[ ]\d{1}/).toString();
        version = storedName.replace(/msie[ ]/,'');

        browserOsVersion = browserName + version;
    }

Взято з https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js


2

Спробуйте це ..

// Browser with version  Detection
navigator.sayswho= (function(){
    var N= navigator.appName, ua= navigator.userAgent, tem;
    var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
    if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
    M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
    return M;
})();

var browser_version          = navigator.sayswho;
alert("Welcome to " + browser_version);

перевірити робочу скрипку ( тут )


2

Для Firefox, Chrome, Opera, Internet Explorer та Safari

var ua="Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)";
//ua = navigator.userAgent;
var b;
var browser;
if(ua.indexOf("Opera")!=-1) {

    b=browser="Opera";
}
if(ua.indexOf("Firefox")!=-1 && ua.indexOf("Opera")==-1) {
    b=browser="Firefox";
    // Opera may also contains Firefox
}
if(ua.indexOf("Chrome")!=-1) {
    b=browser="Chrome";
}
if(ua.indexOf("Safari")!=-1 && ua.indexOf("Chrome")==-1) {
    b=browser="Safari";
    // Chrome always contains Safari
}

if(ua.indexOf("MSIE")!=-1 && (ua.indexOf("Opera")==-1 && ua.indexOf("Trident")==-1)) {
    b="MSIE";
    browser="Internet Explorer";
    //user agent with MSIE and Opera or MSIE and Trident may exist.
}

if(ua.indexOf("Trident")!=-1) {
    b="Trident";
    browser="Internet Explorer";
}

// now for version


var version=ua.match(b+"[ /]+[0-9]+(.[0-9]+)*")[0];

console.log("broswer",browser);
console.log("version",version);

4
додайте це до консолі в хромі та отримайте "Safari / 537.36"
Daniel_Madain

У Chrome і, можливо, в інших браузерах це не вдасться. Оскільки рядок UserAgent не є повністю надійним ресурсом. Постачальники веб-переглядачів часто включають в оману інформацію.
Карлос Хіменес Бермудес,

1

Мені не вдалося отримати деякі інші відповіді на роботу в Chrome, Firefox, IE11 та Edge з тим самим кодом. Я придумав наведене нижче, і, здається, він працює для тих перелічених вище браузерів. Я також хотів подивитися, на якій ОС працює користувач. Я не перевіряв це на веб-переглядачі з налаштованими налаштуваннями User-Agent, тому пробіг може змінюватися. Для того, щоб правильно діяти, важливим є порядок роботи ІФ.

let os, osStore, bStore, appVersion, browser;
// Chrome
if(navigator.vendor === "Google Inc."){
    appVersion = navigator.appVersion.split(" ");
    os = [appVersion[1],appVersion[2],appVersion[3],appVersion[4],appVersion[5]].join(" ");
    os = os.split("(")[1].split(")")[0]
    browser = appVersion[appVersion.length-2].split("/").join(" ");
    console.log("Browser:",browser,"- OS:",os);
}

// Safari
else if(navigator.vendor === "Apple Computer, Inc."){
    appVersion = navigator.appVersion.split(" ");
    os = [appVersion[1],appVersion[2],appVersion[3],appVersion[4],appVersion[5]].join(" ");
    os = os.split("(")[1].split(")")[0];
    browser = appVersion[appVersion.length-1].split("/").join(" ");
    console.log("Browser:",browser,"- OS:",os);
}

// Firefox is seems the only browser with oscpu
else if(navigator.oscpu){
    bStore = navigator.userAgent.split("; ").join("-").split(" ");
    browser = bStore[bStore.length-1].replace("/"," ");
    osStore = [bStore[1],bStore[2],bStore[3]].join(" ");
    osStore = osStore.split("-");
    osStore.pop(osStore.lastIndexOf)
    osStore = osStore.join(" ").split("(");
    os = osStore[1];
    console.log("Browser:",browser,"- OS:",os);
}

// IE is seems the only browser with cpuClass
// MSIE 11:10 Mode
else if(navigator.appName === "Microsoft Internet Explorer"){
    bStore = navigator.appVersion.split("; ");
    browser = bStore[1]+" / "+bStore[4].replace("/"," ");
    os = [bStore[2],bStore[3]].join(" ");
    console.log("Browser:",browser,"- OS:",os);
}

// MSIE 11
else if(navigator.cpuClass){
    bStore = navigator.appVersion.split("; ");
    osStore = [bStore[0],bStore[1]].join(" ");
    os = osStore.split("(")[1];
    browser = "MSIE 11 "+bStore[2].split("/").join(" ");
    console.log("Browser:",browser,"- OS:",os);
}

// Edge
else if(navigator.appVersion){
    browser = navigator.appVersion.split(" ");
    browser = browser[browser.length -1].split("/").join(" ");
    os = navigator.appVersion.split(")")[0].split("(")[1];
    console.log("Browser:",browser,"- OS:",os);
}

// Other browser
else {
    console.log(JSON.stringify(navigator));
}

0

Код для виявлення операційної системи користувача

let os = navigator.userAgent.slice(13).split(';')
os = os[0]
console.log(os)
Windows NT 10.0

0

Щоб отримати новий Microsoft Edge на основі ядра Mozilla, додайте:

else if ((verOffset=nAgt.indexOf("Edg"))!=-1) {
 browserName = "Microsoft Edge";
 fullVersion = nAgt.substring(verOffset+5);
}

раніше

// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.