Wie erkenne ich meine Browserversion und mein Betriebssystem mit JavaScript?

113

Ich habe versucht, den folgenden Code zu verwenden, aber er zeigt nur Ergebnisse an, wenn Chrome und Mozilla in IE6 nicht funktionieren.

<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>

Ausgabe:

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

Ich brauche nur die Version "Firefox / 12.0".

Capri
quelle
3
quirksmode.org/js/detect.html Bitte überprüfen Sie es, sobald dies Ihnen helfen kann ..
Jalpesh Patel
Weitere relevante Antworten finden Sie zu diesem und jenem 'fast' Dupes
Matthijs Wessels
Überprüfen Sie meine Antwort von diesem Link ( stackoverflow.com/questions/9847580/… )
Malki Mohamed

Antworten:

167

Browserdetails erkennen:

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>'
)

Quell- JavaScript: Browsername .
Informationen zum Erkennen von Browserdetails finden Sie unter JSFiddle .

Betriebssystem erkennen:

// 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);

Quell- JavaScript: Betriebssystemerkennung .
Informationen zum Erkennen von Betriebssystemdetails finden Sie unter JSFiddle .

hims056
quelle
1
Wissen Sie, wo ich alle möglichen Werte von appVersion finden konnte? Nun, alle möglichen Betriebssystemwerte, die appVersion verwendet?
John Odom
3
@ JohnOdom Neue Systeme (z. B. die kommende Steam-Box) haben wahrscheinlich ihre eigenen Namen. und vorhandene Systeme können ihre Namen oder Abkürzungen ändern. Sie werden niemals auf dem neuesten Stand sein, es sei denn, Sie verwenden eine globale Datenbank, um diese Informationen abzurufen. da dies völlig proprietär ist. Vielleicht bieten Google, W3 usw. eines Tages eine API an, um die verschiedenen Systemnamen und ihre Beziehungen, die sie von ihren Nutzern erhalten, zu sammeln und öffentlich zugänglich zu machen.
Domi
1
verOffset = nAgt.indexOf ("Opera"))! = - 1. Dies funktioniert nicht für Opera 20 und höher.
parth.hirpara
2
Edge kann nicht erkannt werden.
Mohan Singh
1
Dieses Javascript ist veraltet. Meldet Edge und IE 11 als "Netscape 5". Schlagen Sie vor, für diese Funktionalität eine gepflegte Bibliothek wie github.com/faisalman/ua-parser-js
James Boutcher zu verwenden.
20

Ich bin traurig zu sagen: Wir haben in dieser Sache kein Pech.

Ich möchte Sie an den Autor von WhichBrowser verweisen : Jeder lügt .

Grundsätzlich ist kein Browser ehrlich. Unabhängig davon, ob Sie Chrome oder IE verwenden, werden beide Ihnen mitteilen, dass es sich um "Mozilla Netscape" mit Gecko- und Safari-Unterstützung handelt. Probieren Sie es selbst an einem der Geigen aus, die in diesem Thread herumfliegen:

hims056s Geige

Hariharans Geige

oder irgendein anderes ... Probieren Sie es mit Chrome aus (was möglicherweise immer noch erfolgreich ist), dann versuchen Sie es mit einer aktuellen Version von IE, und Sie werden weinen. Natürlich gibt es Heuristiken, um alles in Ordnung zu bringen, aber es wird mühsam sein, alle Randfälle zu erfassen, und sie werden höchstwahrscheinlich in einem Jahr nicht mehr funktionieren.

Nehmen Sie zum Beispiel Ihren Code:

<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 sagt:

Browser-Codename: Mozilla

Browsername: Netscape

Browserversion: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 40.0.2214.115 Safari / 537.36

Cookies aktiviert: true

Plattform: Win32

Benutzeragenten-Header: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, wie Gecko) Chrome / 40.0.2214.115 Safari / 537.36

IE sagt:

Browser-Codename: Mozilla

Browsername: Netscape

Browserversion: 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) wie Gecko

Cookies aktiviert: true

Plattform: Win32

Benutzeragenten-Header: 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) wie Gecko

Zumindest hat Chrome noch eine Zeichenfolge, die "Chrome" mit der genauen Versionsnummer enthält. Aber für IE müssen Sie aus den unterstützten Dingen extrapolieren, um es tatsächlich herauszufinden (wer sonst würde sich rühmen, dass sie unterstützen .NEToder Media Center: P), und es dann rv:ganz am Ende mit dem vergleichen, um die Versionsnummer zu erhalten. Natürlich können selbst solch ausgefeilte Heuristiken sehr wahrscheinlich versagen, sobald IE 12 (oder wie auch immer sie es nennen wollen) herauskommt.

Domi
quelle
2
Es zeigt den Chrome for Opera-Browser an.
Rajkishor Sahu
Einige dieser Eigenschaften werden "aus Gründen der Abwärtskompatibilität beibehalten", z. B. geben alle Browser "Netscape" für navigator.appNamedeveloper.mozilla.org/en-US/docs/Web/API/NavigatorID
Philipp
18

Zu diesem Zweck gibt es eine Bibliothek: https://github.com/bestiejs/platform.js#readme

Dann können Sie es auf diese Weise verwenden

// 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)'
timaschew
quelle
1
Beachten Sie, dass von allen Links zu Github-Bibliotheken in den Antworten hier diese Bibliothek die aktuellste zu sein scheint (Schreiben im Mai 2018, mit dem letzten Commit 'vor 3 Monaten')
Ideogramm
12

Um das Betriebssystem mithilfe von JavaScript zu erkennen, ist es besser, navigator.userAgent anstelle von navigator.appVersion zu verwenden

{
  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);
}

Nisal Edu
quelle
1
Upvoting. Außerdem wäre es sehr hilfreich, wenn Sie erklären könnten, warum genau es besser ist :) Außerdem scheint 'UNIX / X11' fehlgeschlagen zu sein.
Systems Rebooter
@SystemsRebooter Vielen Dank für den Kommentar, den Sie als andere hinzufügen können.
Nisal Edu
1
tolle Antwort, das war sehr hilfreich
Jeremy Bader
9

Das Skript von PPK ist DIE Autorität für diese Art von Dingen, wie @Jalpesh sagte, dies könnte Sie auf den richtigen Weg weisen

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;
    }

Entnommen aus https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js

leopisch
quelle
2

Probier diese..

// 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);

Schauen Sie sich die funktionierende Geige an ( hier )

Hariharan GR
quelle
2

Für Firefox, Chrome, Opera, Internet Explorer und 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);
vusan
quelle
4
füge dies der Konsole in Chrom hinzu und erhalte "Safari / 537.36"
Daniel_Madain
Dies schlägt in Chrome und möglicherweise in anderen Browsern fehl. Da die UserAgent-Zeichenfolge keine vollständig zuverlässige Ressource ist. Browser-Anbieter enthalten häufig irreführende Informationen.
Carlos Jimenez Bermudez
1

Ich konnte einige der anderen Antworten nicht für Chrome, Firefox, IE11 und Edge mit demselben Code erhalten. Ich habe mir das Folgende ausgedacht und es scheint für die oben aufgeführten Browser zu funktionieren. Ich wollte auch sehen, auf welchem ​​Betriebssystem der Benutzer war. Ich habe dies nicht mit einem Browser mit vom Benutzer überschriebenen User-Agent-Einstellungen getestet, daher kann der Kilometerstand variieren. Die Reihenfolge der IFs ist wichtig, damit dies korrekt funktioniert.

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));
}
D. Großartig
quelle
0

Code zum Erkennen des Betriebssystems eines Benutzers

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

Um den neuen Microsoft Edge basierend auf einem Mozilla-Kern zu erhalten, fügen Sie Folgendes hinzu:

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

Vor

// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
Frablaser
quelle