web-dev-qa-db-ja.com

ユーザーエージェントまたはJavascriptから64ビットまたは32ビットのWindowsを検出しますか?

適切なバージョンのダウンロードを提供したい。私が持っているバージョンは次のとおりです。

  • 32ビットWindows
  • 64ビットWindows
  • Linux

User Agentフィールドを使用したLinuxの検出は簡単です。しかし、Windowsが32ビットか64ビットかを確実に把握することは可能ですか?

ユーザーは奇妙なブラウザを使用している可能性があります-IEとFirefoxは一般的であり、おそらくどこかにOperaユーザーがいます。多分Chromeユーザーも。 64ビットWindows 7には32ビットバージョンと64ビットバージョンのIEが付属していることを知っています。ダウンロードした64ビットバージョンの両方を送信したいと思います。

(追加するために編集:すべてのオプションを提供する必要があることを知っています。しかし、 人々はオプションを読まない 。だから使いやすさを改善するために、デフォルトで正しいダウンロードを提供したかったです。もちろん、これは私がそれを正しく理解するのに役立ちますが、私がそれを間違えると非常に役に立たなくなります。そして、これまでの答えから、これを行う信頼できる方法があるようには見えません)。

75
user9876

これを試して、ユーザーエージェント文字列でWOW64(64ビットで32ビット)またはWin64(ネイティブ64ビット)を探します。

    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");
    }
52
saschabeaumont

いくつかのテストを行いました。結果がここにあります、それが役立つことを望みます:

 64ビットMacOS + 64ビットSafariまたは32ビットChrome:
 window.navigator.platform = MacIntel 
 
 32ビットウィンドウ+サファリ:
 window.navigator.platform = Win32 
 
 64ビットWindows + 64ビットIE:
 window.navigator.platform = Win64 
 window.navigator.cpuClass = x64 
 
 64ビットWindows + 32ビットIE:
 window.navigator.platform = Win32 
 window.navigator.cpuClass = x86 
 
 64ビットWindows + 32 Firefox(またはChrome):
 window.navigator.platform = Win32 
 
 32ビットlinuxミント(i686)+ firefox:
 window .navigator.platform = Linux i686 
 
 64ビットUbuntu(x86_64)+ 32ビットChrome:
 window.navigator.platform = Linux i686 
 
 64ビットUbuntu + 64ビットEpiphany:
 window.navigator.platform = Linux x86_64 

これまで私はこのコードを使用しました:

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

14000個の一意のユーザーエージェントここから )を分析すると、次の文字列が見つかります:

  • x86_64
  • x86-64
  • Win64
  • x64; (セミコロンに注意してください!セミコロンがないと、偽陽性になります。)
  • AMD64
  • AMD64
  • WOW64
  • x64_64

さらに、命令セットが異なり、Intel x86_64と互換性がありませんが、次の検出が必要になる場合があります。

  • ia64
  • sparc64
  • ppc64
  • IRIX64

ただし、「64」または「x64」を含むものだけを探してはいけません。 Chromeのビルド番号、スパイダー/ボット、ライブラリ、.NETバージョン、解像度などにも、32ビット(または他の)OSのままで文字列「x64」が含まれる場合があります。

これらのすべての文字列を大文字と小文字を区別せずに検索できることに注意してください。

ARMで何も見つかりませんでした。おそらく誰か?編集してください、それはコミュニティwikiです。

29
Luc

window.navigator.platform そしてその window.navigator.cpuClass

あなたの状況はわかりませんが、他のほとんどのサイトがやっていることだけを考えて、ユーザーが取得するダウンロードを選択できるようにします。別のマシンにダウンロードしたり、フラッシュデバイスを使用したり、単に32ビットバージョンを64ビットボックスで実行したりすることもできます。理由が何であれ、私はむしろ選択肢があります。

24
RC.

最も信頼できるソリューションは、アーキテクチャを検出し、アプリケーションの適切なバージョンをダウンロードしてインストールする32ビットローダーアプリケーションを作成することです。

RCとPinoからの他の2つの回答を確認しました。あなたが提案するのと同じ問題のために、両方とも機能しません-32ビットIEはプラットフォームを32ビットとして誤って識別します。 IE 64ビットWindows(多くのプラグイン、たとえばFlashは64ビットでは利用できません)、多くの生身の識別があります

リー

18
Lee Atkinson

OSが64ビットであるのに対し、ブラウザは32ビットバージョンである可能性があると言うので、100%の確実性はありません。

ブラウザを検出するには、次のコードを試してください。

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

CPU:ia64

IEの場合。

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

商用製品: https://www.cyscape.com/showbrow.aspx

8
LiamB

64ビットの64ビットWindowsの場合IE window.navigator.platformは「Win64」であり、window.navigator.cpuClassは「x64」になります。

32ビットIEを備えた64ビットWindowsの場合、window.navigator.platformは「Win32」であり、window.navigator.cpuClassは「x86」になります。

32ビットWindowsの場合、window.navigator.platformは「Win32」であり、window.navigator.cpuClassは未定義になります(私は思う)。

-

出典:私は 誰かが32ビットまたは64ビットのプロセッサーを使用しているかどうかを判断するためにJavaScriptを使用するアプリ を作成しました。 GitHubでコードを確認できます

4
peterhurford

これらのJS関数に対する上記のニース検索の結果を再開しました。彼らがここにいるすべての人が彼らのニーズに迅速に対応するのを助けることができることを願っています(そして、私もそうです!)

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

試して:

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

皆に感謝します!

3
Sandro Rosa

私は次のコードを使用しました:

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

Macコンピューターを期待してどこでも動作しました。残念ながら、JavaScriptを使用してその情報を取得することは不可能のようです:(。ただし、もう1つの方法があります。Adobeはx64ブラウザでFlash Playerをサポートしていないため、検出を試みることができます。間違いなく32ビットブラウザーよりも、いや、Flashプラグインなしの32ビットブラウザーまたは64ビットブラウザーよりも。Flashプレーヤーの普及率は非常に大きいため( http:// www .Adobe.com/products/player_census/flashplayer/version_penetration.html )、これは少なくともMacでx32ブラウザーを検出するのに十分なはずです。

2
GermanZ

Window.navigator.cpuClassとwindow.navigator.platformの両方がブラウザープラットフォームを返します。システムプラットフォームではありません。したがって、64ビットシステムで32ビットブラウザーを実行している場合、両方の変数は32ビットを返します。どちらが間違っているでしょう。

1
Dan

64ビットIE Internet Explorerブラウザーの64ビットWindowsの場合

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
ashish

私はこの古い質問を見つけ、最近見つけたオープンソースライブラリで更新することを考えました: https://github.com/faisalman/ua-parser-js

ドキュメントによると、メソッドgetCPU()returns { architecture: '' }、次の可能な値:68k, AMD64, arm, arm64, avr, ia32, ia64, irix, irix64, mips, mips64, pa-risc, ppc, sparc, sparc64

0
don