Tarayıcı sürümümü ve işletim sistemimi JavaScript kullanarak nasıl tespit edebilirim?


113

Aşağıdaki kodu kullanmayı denedim, ancak sonuçları yalnızca Chrome ve Mozilla'da IE6'da çalışmıyor gösteriyor.

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

Çıktı:

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

Yalnızca "Firefox / 12.0" sürümünü edinmem gerekiyor.


3
quirksmode.org/js/detect.html bu size yardımcı olabilir bir kez kontrol edin ..
Jalpesh Patel

Bu ve bu 'neredeyse' taklitler hakkında ek ilgili cevaplar bulunabilir
Matthijs Wessels

Bu bağlantıdan cevabımı kontrol edin ( stackoverflow.com/questions/9847580/… )
Malki Mohamed

Yanıtlar:


167

Tarayıcının ayrıntılarını algılama:

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

Kaynak JavaScript: tarayıcı adı .
Tarayıcı Ayrıntılarını algılamak için JSFiddle'a bakın .

Algılama İşletim Sistemi:

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

kaynak JavaScript: İşletim sistemi algılama .
İşletim Sistemi Ayrıntılarını algılamak için JSFiddle'a bakın .


1
AppVersion'ın tüm olası değerlerini nerede bulabileceğimi biliyor musunuz? Peki, appVersion'ın kullandığı tüm olası işletim sistemi değerleri?
John Odom

3
@JohnOdom Yeni sistemlerin (örn. Yakında çıkacak Steam kutusu) muhtemelen kendi adları vardır; ve mevcut sistemler adlarını veya kısayollarını değiştirebilir. Bu bilgileri almak için bir tür küresel veritabanı kullanmadığınız sürece asla güncel olmayacaksınız; çünkü bu tamamen tescillidir. Belki bir gün, Google, W3 vb. Kitle kaynağına bir API sunacak ve kullanıcılarından topladıkları tüm farklı sistem adlarını ve ilişkilerini kamuya açık hale getirecektir.
Domi

1
verOffset = nAgt.indexOf ( "Opera")) = - 1. Bu Opera 20 ve üzeri için çalışmaz.
parth.hirpara

2
Edge algılanamıyor.
Mohan Singh

1
Bu Javascript güncel değil. Edge ve IE 11'i "Netscape 5" olarak rapor eder. Bu işlev için github.com/faisalman/ua-parser-js
James Boutcher

20

Bunu söylediğim için üzgünüm: Bu konuda şansımız tükendi.

Sizi WhatBrowser : Herkes yalan söylüyor kitabının yazarına yönlendirmek istiyorum .

Temel olarak, hiçbir tarayıcı dürüst davranmıyor. Chrome veya IE kullanıyor olsanız da, ikisi de size Gecko ve Safari destekli "Mozilla Netscape" olduklarını söyleyecektir. Bu konudaki etrafta dolaşan kemanlardan herhangi birinde kendiniz deneyin:

hims056'nın keman

Harihan'ın keman

veya başka bir şey ... Chrome ile deneyin (yine de başarılı olabilir), ardından IE'nin son sürümüyle deneyin ve ağlayacaksınız. Elbette, her şeyi düzeltmek için sezgisel yöntemler var, ancak tüm uç durumları kavramak sıkıcı olacak ve bir yıl sonra büyük olasılıkla artık işe yaramayacaklar.

Örneğin kodunuzu alın:

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

Tarayıcı KoduAdı: Mozilla

Tarayıcı Adı: Netscape

Tarayıcı Sürümü: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, Gecko gibi) Chrome / 40.0.2214.115 Safari / 537.36

Etkin Çerezler: true

Platform: Win32

Kullanıcı aracısı başlığı: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, Gecko gibi) Chrome / 40.0.2214.115 Safari / 537.36

IE diyor ki:

Tarayıcı KoduAdı: Mozilla

Tarayıcı Adı: Netscape

Tarayıcı Sürümü: 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 gibi

Etkin Çerezler: true

Platform: Win32

Kullanıcı aracısı başlığı: 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 gibi

En azından Chrome, tam sürüm numarasına sahip "Chrome" kelimesini içeren bir dizeye sahiptir. Ancak, IE için desteklediği şeylerden yola çıkarak onu gerçekten anlamanız gerekir (başka kim destekledikleriyle övünür .NETya da Media Center: P) ve ardından rv:sürüm numarasını almak için en sonunda onu eşleştirmeniz gerekir . Elbette, bu tür karmaşık buluşsal yöntemler bile, IE 12 (veya ne diyorlarsa) çıktığı anda büyük olasılıkla başarısız olabilir.


2
Opera tarayıcısı için Chrome görüntüleniyor.
Rajkishor Sahu

bu özelliklerden bazıları "geriye dönük uyumluluk için tutulur", örneğin tüm tarayıcılar navigator.appNamedeveloper.mozilla.org/en-US/docs/Web/API/NavigatorID
Philipp

18

Bunun için bir kütüphane var: https://github.com/bestiejs/platform.js#readme

O zaman bu şekilde kullanabilirsin

// 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
Buradaki cevaplardaki tüm github kitaplıklarına olan bağlantılardan, bu kitaplığın en güncel gibi göründüğünü unutmayın (Mayıs 2018'de, son işlem '3 ay önce' ile
yazılıyor

13

JavaScript kullanarak işletim sistemini tespit etmek için navigator.appVersion yerine navigator.userAgent kullanmak daha iyidir

{
  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
Upvoting. Ayrıca neden daha iyi olduğunu açıklarsanız çok yardımcı olur :) Ayrıca 'UNIX / X11' kaçırılmış gibi görünüyor.
Systems Rebooter

@SystemsRebooter Yorumlarınız için teşekkürler, bunları diğerleri olarak ekleyebilirsiniz.
Nisal Edu

1
harika yanıt, bu çok yardımcı oldu
Jeremy Bader

9

@ Jalpesh'in dediği gibi, PPK'nın senaryosu bu tür şeyler için yetkilidir, bu sizi doğru şekilde gösterebilir

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

Alındığı https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js


2

Bunu dene..

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

çalışma kemanına bakın ( burada )


2

Firefox, Chrome, Opera, Internet Explorer ve Safari için

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
bunu konsola krom olarak ekleyin ve "Safari / 537.36" var
Daniel_Madain

Bu, Chrome'da ve muhtemelen diğer tarayıcılarda başarısız olacaktır. UserAgent dizesi tamamen güvenilir bir kaynak olmadığından. Tarayıcı satıcıları genellikle yanıltıcı bilgiler içerir.
Carlos Jimenez Bermudez

1

Aynı kodla Chrome, Firefox, IE11 ve Edge üzerinde çalışmak için diğer yanıtlardan bazılarını alamadım. Aşağıdakini buldum ve yukarıda listelenen tarayıcılar için çalışıyor gibi görünüyor. Ayrıca kullanıcının hangi işletim sistemini kullandığını görmek istedim. Bunu, kullanıcı tarafından geçersiz kılınan Kullanıcı-Aracı ayarlarına sahip bir tarayıcıya karşı test etmedim, bu nedenle kilometre değişebilir. IF'lerin sırası, bunun doğru çalışması için önemlidir.

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

Bir kullanıcının işletim sistemini tespit eden kod

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

0

Mozilla çekirdeğine dayalı yeni Microsoft Edge eklentisini edinmek için:

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

önce

// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.