Làm cách nào để phát hiện phiên bản trình duyệt và hệ điều hành của tôi bằng JavaScript?


113

Tôi đã thử sử dụng mã bên dưới nhưng nó chỉ hiển thị kết quả trong Chrome và Mozilla không hoạt động trong 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>

Đầu ra:

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

Tôi chỉ cần tải phiên bản "Firefox / 12.0".


3
quirksmode.org/js/detect.html xin vui lòng kiểm tra xem nó một lần này có thể giúp bạn ..
Jalpesh Patel

Câu trả lời bổ sung có liên quan có thể được tìm thấy trên nàynày 'gần như' giá trị nhân bản
Matthijs Wessels

Kiểm tra câu trả lời của tôi từ liên kết này ( stackoverflow.com/questions/9847580/… )
Malki Mohamed

Câu trả lời:


167

Phát hiện chi tiết của trình duyệt:

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

Nguồn JavaScript: tên trình duyệt .
Xem JSFiddle để phát hiện chi tiết trình duyệt .

Phát hiện hệ điều hành:

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

nguồn JavaScript: Phát hiện hệ điều hành .
Xem JSFiddle để phát hiện Chi tiết hệ điều hành .


1
Bạn có biết nơi tôi có thể tìm thấy tất cả các giá trị có thể có của appVersion không? Tất cả các giá trị hệ điều hành có thể có mà appVersion sử dụng?
John Odom

3
@JohnOdom Các hệ thống mới, (ví dụ như hộp Steam sắp ra mắt) có thể có tên riêng; và các hệ thống hiện tại có thể thay đổi tên hoặc giao thức tắt của chúng. Bạn sẽ không bao giờ được cập nhật, trừ khi bạn sử dụng một số loại cơ sở dữ liệu toàn cầu để lấy thông tin đó; vì điều này là hoàn toàn độc quyền. Có thể một ngày nào đó, Google, W3, v.v. sẽ cung cấp một API để tạo nguồn cộng đồng và công bố công khai tất cả các tên hệ thống khác nhau và các mối quan hệ của chúng mà họ thu thập được từ người dùng của mình.
Domi

1
verOffset = nAgt.indexOf ("Opera"))! = - 1. Điều này sẽ không hoạt động cho Opera 20 trở lên.
parth.hirpara

2
Không thể phát hiện Edge.
Mohan Singh

1
Javascript này đã lỗi thời. Báo cáo Edge và IE 11 là "Netscape 5". Đề nghị sử dụng một thư viện duy trì chức năng này như github.com/faisalman/ua-parser-js
James Boutcher

20

Tôi rất buồn khi phải nói rằng: Chúng tôi không gặp may trong vấn đề này.

Tôi muốn giới thiệu bạn với tác giả của whichBrowser : Mọi người đều nói dối .

Về cơ bản, không có trình duyệt nào là trung thực. Bất kể bạn sử dụng Chrome hay IE, cả hai đều sẽ cho bạn biết rằng chúng là "Mozilla Netscape" với hỗ trợ Gecko và Safari. Hãy tự mình thử trên bất kỳ trò chơi nào đang bay xung quanh trong chủ đề này:

Fiddle's Fiddle

Hariharan's fiddle

hoặc bất kỳ thứ gì khác ... Hãy thử nó với Chrome (có thể vẫn thành công), sau đó thử nó với phiên bản IE gần đây, và bạn sẽ khóc. Tất nhiên, có những kinh nghiệm để giải quyết ổn thỏa, nhưng sẽ rất tẻ nhạt để nắm bắt tất cả các trường hợp cạnh tranh và chúng rất có thể sẽ không hoạt động nữa trong thời gian một năm.

Lấy mã của bạn, ví dụ:

<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 nói:

Tên trình duyệt: Mozilla

Tên trình duyệt: Netscape

Phiên bản trình duyệt: 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, như Gecko) Chrome / 40.0.2214.115 Safari / 537.36

Đã bật cookie: true

Nền tảng: Win32

Tiêu đề tác nhân người dùng: Mozilla / 5.0 (Windows NT 6.1; WOW64) AppleWebKit / 537.36 (KHTML, như Gecko) Chrome / 40.0.2214.115 Safari / 537.36

IE nói:

Tên trình duyệt: Mozilla

Tên trình duyệt: Netscape

Phiên bản trình duyệt: 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) như Gecko

Đã bật cookie: true

Nền tảng: Win32

Tiêu đề tác nhân người dùng: 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) như Gecko

Ít nhất thì Chrome vẫn có một chuỗi chứa "Chrome" với số phiên bản chính xác. Tuy nhiên, đối với IE, bạn phải ngoại suy từ những thứ mà nó hỗ trợ để thực sự tìm ra nó (ai khác sẽ tự hào rằng họ hỗ trợ .NEThoặc Media Center: P), và sau đó so khớp nó với rv:cuối cùng để lấy số phiên bản. Tất nhiên, ngay cả những kinh nghiệm phức tạp như vậy cũng rất có thể thất bại ngay khi IE 12 (hoặc bất cứ thứ gì họ muốn gọi là nó) ra mắt.


2
Nó hiển thị trình duyệt Chrome cho Opera.
Rajkishor Sahu

một số thuộc tính đó được "giữ lại để tương thích ngược", ví dụ: tất cả các trình duyệt sẽ trả về "Netscape" cho navigator.appNamedeveloper.mozilla.org/en-US/docs/Web/API/NavigatorID
Philipp

18

Có một thư viện cho mục đích này: https://github.com/bestiejs/platform.js#readme

Sau đó, bạn có thể sử dụng nó theo cách này

// 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
Lưu ý rằng từ tất cả các liên kết đến thư viện github trong câu trả lời ở đây, thư viện này có vẻ là cập nhật nhất (Viết vào tháng 5 năm 2018, với cam kết cuối cùng là '3 tháng trước')
Ideogram

12

Để phát hiện hệ điều hành sử dụng JavaScript, tốt hơn là sử dụng Navigator.userAgent thay vì 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
Đang ủng hộ. Ngoài ra, sẽ rất hữu ích nếu bạn có thể giải thích chính xác lý do tại sao nó tốt hơn :) Ngoài ra, có vẻ như 'UNIX / X11' bị bỏ lỡ.
Hệ thống Rebooter

@SystemsRebooter Cảm ơn bạn đã nhận xét, bạn có thể thêm những nhận xét đó như những người khác.
Nisal Edu

1
Câu trả lời rất lớn, điều này rất hữu ích
Jeremy Bader

9

Tập lệnh của PPK là quyền hạn cho những thứ này, như @Jalpesh đã nói, điều này có thể chỉ cho bạn một cách đúng đắn

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

Lấy từ https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js


2

Hãy thử cái này ..

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

kiểm tra fiddle hoạt động ( tại đây )


2

Đối với Firefox, Chrome, Opera, Internet Explorer và 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
thêm video này vào giao diện điều khiển trong chrome và có "Safari / 537,36"
Daniel_Madain

Điều này sẽ không thành công trong chrome và có thể trong các trình duyệt khác. Vì chuỗi UserAgent không phải là một tài nguyên hoàn toàn đáng tin cậy. Các nhà cung cấp trình duyệt thường bao gồm các phần thông tin sai lệch trong đó.
Carlos Jimenez Bermudez

1

Tôi không thể nhận được một số câu trả lời khác để hoạt động trên Chrome, Firefox, IE11 và Edge với cùng một mã. Tôi đã nghĩ ra cách bên dưới và nó có vẻ hoạt động cho những trình duyệt được liệt kê ở trên. Tôi cũng muốn xem người dùng đang sử dụng hệ điều hành nào. Tôi chưa thử nghiệm điều này với một trình duyệt có cài đặt Tác nhân người dùng bị ghi đè của người dùng, vì vậy số dặm có thể thay đổi. Thứ tự của các IF rất quan trọng để điều này hoạt động chính xác.

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

Mã để phát hiện hệ điều hành của người dùng

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

0

Để có được Microsoft Edge mới dựa trên phần bổ sung lõi của Mozilla:

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

trước

// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.