JavaScriptまたはjQueryを使用してMac OS XまたはWindowsコンピューターを検出する最良の方法


110

ユーザーがMacの場合は「閉じる」ボタンを左側に、PCの場合は右側に移動しようとしています。現在はユーザーエージェントを調べることで実行していますが、OSを確実に検出するにはスプーフィングが非常に簡単です。ブラウザが実行されているOSがMac OS XかWindowsかを検出する確実な方法はありますか?そうでない場合は、ユーザーエージェントのスニッフィングよりも優れている点は何ですか。


20
ユーザーがユーザーエージェントを操作する場合、それは彼または彼女の問題ではありませんか?無効なユーザーエージェントを使用することでユーザーに害を及ぼす場合(たとえば、ユーザーエージェントに許可したくないものへのアクセスを許可する場合)は心配ですが、このような理由で、なぜストレスを感じるのですか?彼らが足で自分自身を撃ち、結果に対処しなければならないようにします-背中から汗をかくな、仲間。
Mahmoud Al-Qudsi

ええと、答えよりもヒントのようです。条件付きコメントでIEを検出できます。これは、ウィンドウ検出武器の+1です。しかし、IEが別のOS(Linux上のWineなど)のエミュレーターで実行されている場合、これは失敗します。ちなみにlinuxはどうですか?
ジョセフ

@ MahmoudAl-Qudsiスプーフィングがなくても、モバイルFirefoxはSafariのふりをすることが多く、OperaはバージョンによってはFirefoxのふりをすることがよくあります。ユーザーエージェントを偽装しなくても、信頼性は非常に低くなります。
ALT


しかし、その質問の答えは単に「ユーザーエージェント」です。
ALT

回答:


192

window.navigator.platformの UserAgent文字列が変更されたときに、プロパティが偽装されていません。Macでテストしましたが、userAgentをiPhoneまたはChrome Windowsに変更した場合、navigator.platformはMacIntelのままです。

navigator.platformは、userAgent文字列が変更されても偽装されません

プロパティも読み取り専用です

navigator.platformは読み取り専用です


次の表を思いついた

Macコンピュータ

Mac68K Macintosh 68Kシステム。
MacPPC Macintosh PowerPCシステム。
MacIntel Macintosh Intelシステム。

iOSデバイス

iPhone iPhone。
iPod iPod Touch。
iPad iPad。


現代のマックのリターンはnavigator.platform == "MacIntel"なく、いくつかの「未来の証拠」を与えるために、正確なマッチングを使用していないうまくいけば、彼らは同じようなものに変更されMacARMたりMacQuantum、将来的に。

var isMac = navigator.platform.toUpperCase().indexOf('MAC')>=0;

「左側」も使用するiOSを含めるには

var isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
var isIOS = /(iPhone|iPod|iPad)/i.test(navigator.platform);


ほとんどのOSは右側にある閉じるボタンを使用するため、ユーザーがMacLike OSを使用しているときに閉じるボタンを左に移動するだけで済みます。それ以外の場合は、最も一般的な側である右側に配置しても問題ありません。

setTimeout(test, 1000); //delay for demonstration

function test() {

  var mac = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);

  if (mac) {
    document.getElementById('close').classList.add("left");
  }
}
#window {
  position: absolute;
  margin: 1em;
  width: 300px;
  padding: 10px;
  border: 1px solid gray;
  background-color: #DDD;
  text-align: center;
  box-shadow: 0px 1px 3px #000;
}
#close {
  position: absolute;
  top: 0px;
  right: 0px;
  width: 22px;
  height: 22px;
  margin: -12px;
  box-shadow: 0px 1px 3px #000;
  background-color: #000;
  border: 2px solid #FFF;
  border-radius: 22px;
  color: #FFF;
  text-align: center;
  font: 14px"Comic Sans MS", Monaco;
}
#close.left{
  left: 0px;
}
<div id="window">
  <div id="close">x</div>
  <p>Hello!</p>
  <p>If the "close button" change to the left side</p>
  <p>you're on a Mac like system!</p>
</div>

http://www.nczonline.net/blog/2007/12/17/don-t-forget-navigator-platform/


3
@ Vitim.usは詳細な回答に大変感謝しています。本当に私の日を節約できました:)
vivekkupadhyay


1
MacQuantumが私の一日を作りました。😂
ÍhorMé

プラットフォームプロパティは読み取り専用ですが、それを偽装することは可能です。stackoverflow.com/questions/2166540/...
ライアンBurbidgeを

1
@Qixさらに優れた改善点は、に置き換えるstr.match(regexp) ? true : falseことregexp.test(string)です。このRegExp.prototype.test()メソッドはネイティブにブール値を返します。したがって、私の優先コードはconst platformIsMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);です。
Rory O'Kane

52

それはそれと同じくらい簡単です:

function isMacintosh() {
  return navigator.platform.indexOf('Mac') > -1
}

function isWindows() {
  return navigator.platform.indexOf('Win') > -1
}

次のような面白いことをすることができます:

var isMac = isMacintosh();
var isPC = !isMacintosh();

1
まあ、それは2つのオペレーティングシステムをカバーしています。ここでのLinux、BSD、アンドロイド、パーム、ソニーのプレイステーションを含む、より包括的な(しかし、おそらくまだ不完全)リストには、だ等:stackoverflow.com/questions/19877924/...
マイケルScheper

より多くのオペレーティングシステムをカバーしたい場合は、次のようなライブラリを選択する必要があります。github.comPlatform.js / bestiejs
Benny Neugebauer

@BennyNeugebauer isPCはに等しくないはず!isMacintosh();です。ユーザーがLinuxまたはその他の異なるプラットフォームを使用している場合はどうなりますか?Mac上にないことを検出し、PC上にあると考えます。
神秘的な

@EternalDarknessそのため、LinuxはPC上で実行されますが、macOSはMac上でのみ実行されるため、私はそれをisPCisWindowsまたはではなくisLinux)呼び出しました。
Benny Neugebauer、

5

これはあなたが探しているものですか?それ以外の場合は、お知らせください。この投稿を削除します。

このjQueryプラグインを試してください:http : //archive.plugins.jquery.com/project/client-detect

デモ: http : //www.stoimen.com/jquery.client.plugin/

これは、quirksmode BrowserDetectに基づいています。jQueryブラウザー/ OS検出プラグインのラップ。

熱心な読者向け:
http : //www.stoimen.com/blog/2009/07/16/jquery-browser-and-os-detection-plugin/
http://www.quirksmode.org/js/support.html

そして、プラグイン周辺のより多くのコードはここにあります:http : //www.stoimen.com/jquery.client.plugin/jquery.client.js


2
おい!ユーザーエージェントを偽装しましたが、Mac用のSafariで引き続き検出されました!BRUVに感謝します。
2012年

1
@JacksonGariety心配することはありませんbruv :))詳細はこちらをお読みくださいコード全体を樹脂化しています:) stoimen.com/jquery.client.plugin/jquery.client.js素晴らしい1つのブロスニアックをお持ちください:)乾杯!
Tats_innit

@Derek hiya bruv -それは、ブラウザ/ OSのquirkmodeブラウザプラグインと検出を使用していますこちらをご覧quirksmode.org/js/detect.html、さらに参照stoimen.com/jquery.client.plugin/jquery.client.jsをquirksmode.org /js/support.html bruv :)
Tats_innit

気にしないでください、これは単にユーザーエージェントを使用しているように見えます...ちょっとひどいです。
ALT

1
本当に私が探している答えではありません。可能ですか?
ALT

0

これが機能するかどうか教えてください。Appleデバイス(Macコンピューター、iPhoneなど)を検出する方法StackOverflow.comの現在のところ
、navigator.platformに可能な値のリストは何ですか?

var deviceDetect = navigator.platform;
var appleDevicesArr = ['MacIntel', 'MacPPC', 'Mac68K', 'Macintosh', 'iPhone', 
'iPod', 'iPad', 'iPhone Simulator', 'iPod Simulator', 'iPad Simulator', 'Pike 
v7.6 release 92', 'Pike v7.8 release 517'];

// If on Apple device
if(appleDevicesArr.includes(deviceDetect)) {
    // Execute code
}
// If NOT on Apple device
else {
    // Execute code
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.