Phát hiện Windows 64 bit hoặc 32 bit từ Tác nhân người dùng hoặc Javascript?


80

Tôi muốn cung cấp phiên bản tải xuống phù hợp. Các phiên bản tôi có là:

  • Windows 32 bit
  • Windows 64 bit
  • Linux

Dễ dàng phát hiện Linux bằng cách sử dụng trường Tác nhân Người dùng; nhưng liệu có thể tin cậy được nếu Windows là 32-bit hay 64-bit?

Người dùng có thể đang sử dụng các trình duyệt kỳ lạ - IE và Firefox là phổ biến, và chúng ta có thể có một người dùng Opera ở đâu đó; có thể là người dùng Chrome. Tôi biết rằng Windows 7 64-bit có các phiên bản IE 32-bit và 64-bit, và tôi muốn gửi cho họ cả phiên bản 64-bit mà tôi tải xuống.

(Đã chỉnh sửa để thêm: Tôi biết rằng tôi nên cung cấp tất cả các tùy chọn và tôi sẽ làm. Nhưng mọi người không đọc các tùy chọn . Vì vậy, tôi muốn cung cấp tải xuống phù hợp theo mặc định, để cải thiện khả năng sử dụng. Tất nhiên, mặc dù điều này rất hữu ích nếu tôi làm đúng, nếu tôi làm sai sẽ vô cùng vô ích. Và từ các câu trả lời cho đến nay, có vẻ như không có cách nào đáng tin cậy để làm điều này).


1
Đáng ngạc nhiên là phiên bản Linux của bạn hoạt động trên x86, x64 và ARM.
MSalters

9
"Phiên bản Linux" là mã nguồn. Các phiên bản Windows là nhị phân.
user9876

Câu trả lời:


53

Hãy thử điều này, tìm WOW64 (32-bit trên 64-bit) hoặc Win64 (64-bit gốc) trong chuỗi tác nhân người dùng.

    if (navigator.userAgent.indexOf("WOW64") != -1 || 
        navigator.userAgent.indexOf("Win64") != -1 ){
       alert("This is a 64 bit OS");
    } else {
       alert("Not a 64 bit OS");
    }


5
Điều này hoạt động tốt, ngoại trừ Safari trên Windows 7 64-bit, thiếu WOW64, thiếu Win64 và báo cáo window.navigator.platformlà win32. Tôi đã thử nó trong Safari 4 / Win; các phiên bản sau có thể thay đổi.
Will Martin

2
Không chính xác 100% nhưng đó là một manh mối tốt, vì không có cách nào tốt hơn để phát hiện nó một cách đáng tin cậy.
Vitim.us

39

Tôi đã thực hiện một số bài kiểm tra. Đây là kết quả, hy vọng nó sẽ giúp:

MacOS 64 bit + Safari 64 bit hoặc Chrome 32 bit:
window.navigator.platform = MacIntel

Cửa sổ 32 bit + safari:
window.navigator.platform = Win32

Windows 64 bit + IE 64 bit:
window.navigator.platform = Win64
window.navigator.cpuClass = x64

Windows 64 bit + IE 32 bit:
window.navigator.platform = Win32
window.navigator.cpuClass = x86

Windows 64 bit + 32 Firefox (hoặc Chrome):
window.navigator.platform = Win32

32 bit Linux mint (i686) + firefox:
window.navigator.platform = Linux i686

Ubuntu 64 bit (x86_64) + Chrome 32 bit:
window.navigator.platform = Linux i686

Ubuntu 64 bit + 64 bit Epiphany:
window.navigator.platform = Linux x86_64

Cho đến nay tôi đã sử dụng mã này:

deployJava.isWin64OS = function() {
    return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64';
};

1
Điều đó không chính xác. Windows 64-bit w / Chrome 64-bit cũng tạo ra "Win32".
Apollo

31

Phân tích khoảng 14000 tác nhân người dùng duy nhất ( từ đây ), tôi đã đưa ra các chuỗi sau để tìm kiếm:

  • x86_64
  • x86-64
  • Win64
  • x64; (Nhớ dấu chấm phẩy! Nếu không có nó, bạn sẽ có kết quả dương tính giả.)
  • amd64
  • AMD64
  • WOW64
  • x64_64

Ngoài ra, mặc dù chúng có các tập lệnh khác nhau và không tương thích với Intel x86_64, bạn có thể muốn phát hiện những điều sau:

  • ia64
  • sparc64
  • ppc64
  • IRIX64

Tuy nhiên, hãy cẩn thận, đừng chỉ tìm kiếm bất kỳ thứ gì có chứa "64" hoặc thậm chí "x64". Số bản dựng, trình thu thập dữ liệu / bot, thư viện, phiên bản .NET, độ phân giải, v.v. của Chrome cũng có thể chứa chuỗi "x64" trong khi vẫn là hệ điều hành 32 bit (hoặc khác).

Lưu ý rằng bạn có thể tìm kiếm tất cả các chuỗi đó không phân biệt chữ hoa chữ thường.

Tôi đã không thể tìm thấy bất cứ điều gì trên ARM. Có lẽ ai đó khác? Vui lòng chỉnh sửa, nó là một wiki cộng đồng.


Tôi đang kiểm tra đối với RegExp `/ \ barm / i trong chuỗi UA. Ranh giới từ trước "arm" là quan trọng, nếu không, nó cũng sẽ khớp với chuỗi UA cho Ubuntu 9.10 (Karmic Koala). Tôi đã tạo mẫu này dựa trên một số chuỗi UA tại useragentstring.com/pages/Allcode.google.com/p/google-web-toolkit/issues/detail?id=8038
Rob W

24

Bạn có thể kiểm tra window.navigator.platformwindow.navigator.cpuClass.

Tôi không chắc tình huống của bạn, nhưng tôi sẽ xem xét chỉ làm những gì hầu hết các trang web khác làm và để người dùng chọn tải xuống mà họ nhận được. Họ có thể tải nó xuống cho một máy khác, để đặt trên thiết bị flash, hoặc chỉ đơn giản là muốn phiên bản 32-bit chạy trên hộp 64-bit của họ. Dù lý do gì, tôi thà có sự lựa chọn.


6
Nơi tôi làm việc, chúng tôi đã có sẵn tất cả các tùy chọn tải xuống từ lâu, nhưng người dùng thường mắc lỗi tải xuống sai phiên bản cho hệ thống của họ.
exupero

1
Hầu hết người dùng chỉ chọn cái đầu tiên khi họ không chắc chắn. Khi bạn muốn đưa ra đề xuất cho người dùng, bạn có thể đặt phiên bản này trước và thậm chí có thể làm cho nó lớn hơn một chút so với những phiên bản khác.
Philipp

4
Firefox trên Windows 7, 64-bit: navigator.cpuClass === undefined, navigator.platform === "Win32". IE9 trên cùng một máy , navigator.cpuClsas === "x86". Cả hai đều không có tác dụng gì để phát hiện Windows 64-bit. Tuy nhiên, navigator.userAgentkhông chứa WOW64, vì vậy câu trả lời đó là hợp lệ.
Chris Morgan,

19

Giải pháp đáng tin cậy nhất sẽ là tạo một ứng dụng bộ tải 32 bit phát hiện kiến ​​trúc, sau đó tải xuống và cài đặt phiên bản ứng dụng thích hợp của bạn.

Tôi đã kiểm tra hai câu trả lời khác từ RC và Pino. Cả hai đều không hoạt động vì cùng một vấn đề như bạn đề xuất - IE 32-bit trên Windows 64-bit sẽ xác định sai nền tảng là 32-bit. Vì hầu hết mọi người chạy IE 32-bit trên Windows 64-bit (nhiều plugin, ví dụ như Flash không có sẵn ở 64-bit), sẽ có rất nhiều thông tin nhận dạng không chính xác

Lee


1
Tôi đoán ai đó (không phải tôi) đã bỏ phiếu vì nó không trực tiếp trả lời câu hỏi. Tuy nhiên, đó là một cách thay thế để hoàn thành những gì tôi muốn làm.
user9876

3
IE 32 bit bao gồm mã thông báo WOW64, vì vậy sẽ dễ dàng chọn ra.
Nathan Osman

Giải pháp tốt nhất và thân thiện nhất với người dùng theo ý kiến ​​của tôi.
Radu

Tôi chắc chắn ghét những trình cài đặt này, nhưng đó là một tùy chọn, vui lòng không làm phiền người dùng của bạn buộc sau đó cũng cài đặt thanh công cụ đẹp của bạn.
Vitim.us

9

Không chắc chắn 100% như bạn nói trình duyệt có thể là phiên bản 32bit trong khi hệ điều hành là 64bit.

Để phát hiện trình duyệt, vui lòng thử mã sau:

<script language=javascript>   
  <!--   
  document.write("CPU :"+window.navigator.cpuClass);   
  //-->   
</script> 

CPU: ia64

Đối với IE.

http://msdn.microsoft.com/en-us/library/ms531090%28VS.85%29.aspx

Sản phẩm thương mại: https://www.cyscape.com/showbrow.aspx


5
Điều này không giải quyết câu hỏi ban đầu. Điều này tạo ra "x86" trên hộp Windows 7 64 bit sử dụng IE 32 bit. Câu hỏi được yêu cầu để phát hiện bitness của hệ thống và hệ điều hành, không phải bitness của trình duyệt.
Pete

5

Đối với Windows 64-bit với IE 64-bit window.navigator.platformsẽ là "Win64" và window.navigator.cpuClasssẽ là "x64".

Đối với Windows 64-bit với IE 32-bit, window.navigator.platformsẽ là "Win32" và window.navigator.cpuClasssẽ là "x86".

Đối với Windows 32-bit, window.navigator.platformsẽ là "Win32" và window.navigator.cpuClasssẽ không được xác định (tôi nghĩ vậy).

-

Nguồn: Tôi đã tạo một ứng dụng sử dụng JavaScript để xác định xem ai đó đang sử dụng bộ xử lý 32 bit hay 64 bit . Bạn có thể xem mã ở đây trên GitHub .


Bạn không chính xác về điểm cuối cùng của mình, điều đó không có nghĩa là người dùng có máy windows 32 nhưng không. Trên thực tế, tất cả những điều trên chỉ cung cấp cho bạn thông tin trình duyệt, không phải hệ điều hành.
Mo Beigi

3

Tôi tiếp tục các kết quả của tìm kiếm tốt đẹp ở trên vào các hàm JS này. Hy vọng họ có thể giúp mọi người ở đây đáp ứng nhanh nhu cầu của họ (và cả của tôi nữa!)

function get_bits_system_architecture()
{
    var _to_check = [] ;
    if ( window.navigator.cpuClass ) _to_check.push( ( window.navigator.cpuClass + "" ).toLowerCase() ) ;
    if ( window.navigator.platform ) _to_check.push( ( window.navigator.platform + "" ).toLowerCase() ) ;
    if ( navigator.userAgent ) _to_check.push( ( navigator.userAgent + "" ).toLowerCase() ) ;

    var _64bits_signatures = [ "x86_64", "x86-64", "Win64", "x64;", "amd64", "AMD64", "WOW64", "x64_64", "ia64", "sparc64", "ppc64", "IRIX64" ] ;
    var _bits = 32, _i, _c ;
    outer_loop:
    for( var _c = 0 ; _c < _to_check.length ; _c++ )
    {
        for( _i = 0 ; _i < _64bits_signatures.length ; _i++ )
        {
            if ( _to_check[_c].indexOf( _64bits_signatures[_i].toLowerCase() ) != -1 )
            {
               _bits = 64 ;
               break outer_loop;
            }
        }
    }
    return _bits ; 
}


function is_32bits_architecture() { return get_bits_system_architecture() == 32 ? 1 : 0 ; }
function is_64bits_architecture() { return get_bits_system_architecture() == 64 ? 1 : 0 ; }

Kiểm tra nó:

document.write( "Which is my current bits system architecture ? " + get_bits_system_architecture() + "<br>" );

document.write( "Is it 32 bits ? " + ( is_32bits_architecture() ? "YES" : "NO" ) + "<br>" );

document.write( "Is it 64 bits ? " + ( is_64bits_architecture() ? "YES" : "NO" ) );

Cảm ơn tất cả mọi người!


2

Tôi đã sử dụng mã sau:

var is32BitBrowser = true;
if( window.navigator.cpuClass != null && window.navigator.cpuClass.toLowerCase() == "x64" )
   is32BitBrowser = false;
if( window.navigator.platform.toLowerCase() == "win64" )
   is32BitBrowser = false;

Nó hoạt động ở mọi nơi mong đợi máy tính Mac. Và rất tiếc, có vẻ như không thể lấy thông tin đó qua JavaScript :(. Tuy nhiên, một mẹo nữa có thể được thực hiện ở đó. Vì Adobe không hỗ trợ trình phát flash trên trình duyệt x64, bạn có thể thử phát hiện nó. Nếu phát hiện thành công, hơn nó chắc chắn là trình duyệt 32 bit, nếu không, đó là trình duyệt 32 bit không có plugin flash hoặc đó là trình duyệt 64 bit. Bởi vì tỷ lệ thâm nhập của trình phát Flash là khá lớn (xem http://www.adobe.com/products/player_census/ flashplayer / version_penetration.html ), điều này phải đủ tốt để ít nhất phát hiện trình duyệt x32 trên Mac.


1

IE 64 bit trên Windows 64 bit cho mọi trình duyệt Internet Explorer

if (navigator.userAgent.indexOf("MSIE") != -1 && navigator.userAgent.indexOf("Win64") != -1 && navigator.userAgent.indexOf("x64") != -1){

   alert("This is 64 bit browser");

}
else {

   alert("Not 64 bit browser");

}

1

Cả window.navigator.cpuClass và window.navigator.platform đều trả về nền tảng trình duyệt. Không phải nền tảng hệ thống. Vì vậy, nếu bạn đang chạy trình duyệt 32 bit trên hệ thống 64 bit thì cả hai biến thể sẽ trả về 32 bit. Điều nào sẽ không chính xác.


1

Tôi đã tìm thấy câu hỏi cũ này và nghĩ rằng sẽ cập nhật bằng thư viện nguồn mở gần đây mà tôi tìm thấy: https://github.com/faisalman/ua-parser-js

Theo các tài liệu, phương pháp này getCPU() returns { architecture: '' }, với các giá trị có thể như sau: 68k, amd64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64.

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.