Chcę zaoferować odpowiednią wersję pliku do pobrania. Wersje, które posiadam to:
- 32-bitowy system Windows
- 64-bitowy system Windows
- Linux
Wykrywanie systemu Linux za pomocą pola User Agent jest łatwe; ale czy można wiarygodnie ustalić, czy system Windows jest 32-bitowy czy 64-bitowy?
Użytkownicy mogą używać dziwnych przeglądarek - IE i Firefox są powszechne i prawdopodobnie mamy gdzieś użytkownika Opery; może też użytkownik Chrome. Wiem, że 64-bitowy system Windows 7 jest dostarczany z 32-bitową i 64-bitową wersją przeglądarki IE i chciałbym przesłać im 64-bitową wersję mojego pliku do pobrania.
(Zredagowano w celu dodania: Wiem, że powinienem podać wszystkie opcje i to zrobię. Ale ludzie nie czytają opcji . Dlatego chciałem domyślnie zapewnić prawidłowe pobieranie, aby poprawić użyteczność. Oczywiście, chociaż jest to pomocne jeśli zrobię to dobrze, jest to bardzo nieprzydatne, jeśli się mylę. A z dotychczasowych odpowiedzi nie wynika, że można to zrobić w wiarygodny sposób).
źródło
Odpowiedzi:
Spróbuj tego, szuka WOW64 (32-bitowy na 64-bitowy) lub Win64 (natywny 64-bitowy) w ciągu agenta użytkownika.
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"); }
źródło
window.navigator.platform
jako win32. Wypróbowałem to w Safari 4 / Win; późniejsze wersje mogą ulec zmianie.Zrobiłem kilka testów. Oto wyniki, mam nadzieję, że to pomoże:
Do tej pory użyłem tego kodu:
deployJava.isWin64OS = function() { return navigator.userAgent.indexOf('WOW64')>-1 || window.navigator.platform=='Win64'; };
źródło
Analizując około 14000 unikalnych agentów użytkownika ( stąd ), wymyśliłem następujące ciągi znaków do wyszukania:
Ponadto, mimo że mają różne zestawy instrukcji i nie są kompatybilne z Intel x86_64, możesz chcieć wykryć następujące elementy:
Uważaj jednak, nie szukaj niczego, co zawiera „64” lub nawet „x64”. Numery kompilacji Chrome, pająki / boty, biblioteki, wersje .NET, rozdzielczości itp. Mogą również zawierać ciąg „x64”, mimo że jest to 32-bitowy (lub inny) system operacyjny.
Zauważ, że możesz wyszukiwać wszystkie te ciągi bez rozróżniania wielkości liter.
Nie udało mi się znaleźć niczego na ARM. Może ktoś inny? Edytuj, to jest wiki społeczności.
źródło
Możesz sprawdzić
window.navigator.platform
iwindow.navigator.cpuClass
.Nie jestem pewien twojej sytuacji, ale rozważę zrobienie tego, co robi większość innych witryn i pozwolę użytkownikowi wybrać, które pobieranie otrzyma. Mogą pobrać go na inny komputer, umieścić na urządzeniu flash lub po prostu chcieć, aby wersja 32-bitowa działała na ich 64-bitowym pudełku. Bez względu na powód wolałbym mieć wybór.
źródło
navigator.cpuClass === undefined
,navigator.platform === "Win32"
. IE9 na tej samej maszynie,navigator.cpuClsas === "x86"
. Żadne z nich nie jest w ogóle przydatne do wykrywania 64-bitowego systemu Windows.navigator.userAgent
zawieraWOW64
jednak, więc ta odpowiedź jest ważna.Najbardziej niezawodnym rozwiązaniem byłoby utworzenie 32-bitowej aplikacji ładującej, która wykrywa architekturę, a następnie pobiera i instaluje odpowiednią wersję aplikacji.
Sprawdziłem pozostałe dwie odpowiedzi od RC i Pino. Oba nie działają z powodu tego samego problemu, co sugerujesz - 32-bitowa przeglądarka IE w 64-bitowym systemie Windows błędnie identyfikuje platformę jako 32-bitową. Ponieważ większość ludzi korzysta z 32-bitowej przeglądarki IE w 64-bitowym systemie Windows (wiele wtyczek, np. Flash nie jest dostępnych w wersji 64-bitowej), będzie wiele niedokładnych identyfikatorów
Zawietrzny
źródło
Nie ze 100% pewnością, jak mówisz, przeglądarka może być wersją 32-bitową, podczas gdy system operacyjny 64-bitowy.
Aby wykryć przeglądarkę, wypróbuj następujący kod:
<script language=javascript> <!-- document.write("CPU :"+window.navigator.cpuClass); //--> </script>
W przypadku IE.
http://msdn.microsoft.com/en-us/library/ms531090%28VS.85%29.aspx
Produkt komercyjny: https://www.cyscape.com/showbrow.aspx
źródło
W przypadku 64-bitowego systemu Windows z 64-bitową przeglądarką IE
window.navigator.platform
będzie to „Win64” iwindow.navigator.cpuClass
„x64”.W przypadku 64-bitowego systemu Windows i 32-bitowej przeglądarki IE,
window.navigator.platform
będzie to „Win32” iwindow.navigator.cpuClass
„x86”.Dla 32-bitowego systemu Windows
window.navigator.platform
będzie to „Win32” iwindow.navigator.cpuClass
będzie niezdefiniowane (tak myślę).-
Źródło: stworzyłem aplikację, która używa JavaScript do określenia, czy ktoś używa procesora 32-bitowego, czy 64-bitowego . Możesz zobaczyć kod tutaj na GitHub .
źródło
Wróciłem do wyników ładnego wyszukiwania powyżej do tych funkcji JS. Mam nadzieję, że mogą pomóc wszystkim tutaj, aby szybko odpowiedzieć na ich potrzeby (a także na moje!)
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 ; }
Sprawdź to:
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" ) );
Dziękuję wszystkim!
źródło
Użyłem następującego kodu:
var is32BitBrowser = true; if( window.navigator.cpuClass != null && window.navigator.cpuClass.toLowerCase() == "x64" ) is32BitBrowser = false; if( window.navigator.platform.toLowerCase() == "win64" ) is32BitBrowser = false;
Działało wszędzie, poza komputerami Mac. I niestety wygląda na to, że nie jest możliwe uzyskanie tych informacji przez JavaScript :(. Jednak można tam zrobić jeszcze jedną sztuczkę. Ponieważ Adobe nie obsługuje Flash Playera w przeglądarkach x64, możesz po prostu spróbować go wykryć. Jeśli wykrycie się powiedzie, niż jest to zdecydowanie przeglądarka 32-bitowa, jeśli nie, to 32-bitowa przeglądarka bez wtyczki Flash lub przeglądarka 64-bitowa. Ponieważ współczynnik penetracji Flash Playera jest dość duży (patrz http://www.adobe.com/products/player_census/ flashplayer / version_penetration.html ), powinno to wystarczyć, aby przynajmniej wykryć przeglądarkę x32 na Macu.
źródło
64-bitowa przeglądarka IE w 64-bitowym systemie Windows dla dowolnej przeglądarki 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"); }
źródło
Zarówno window.navigator.cpuClass, jak i window.navigator.platform zwracają platformę przeglądarki. Nie platforma systemowa. Więc jeśli używasz 32-bitowej przeglądarki w systemie 64-bitowym, obie zmienne zwróciłyby 32-bitowe. Co byłoby niepoprawne.
źródło
Znalazłem to stare pytanie i pomyślałem, że zaktualizuje się za pomocą najnowszej biblioteki open source, którą znalazłem: https://github.com/faisalman/ua-parser-js
Zgodnie z docs, metoda
getCPU()
returns { architecture: '' }
, z następujących możliwości:68k, amd64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64
.źródło