ユーザーがMacの場合は「閉じる」ボタンを左側に、PCの場合は右側に移動しようとしています。現在はユーザーエージェントを調べることで実行していますが、OSを確実に検出するにはスプーフィングが非常に簡単です。ブラウザが実行されているOSがMac OS XかWindowsかを検出する確実な方法はありますか?そうでない場合は、ユーザーエージェントのスニッフィングよりも優れている点は何ですか。
ユーザーがMacの場合は「閉じる」ボタンを左側に、PCの場合は右側に移動しようとしています。現在はユーザーエージェントを調べることで実行していますが、OSを確実に検出するにはスプーフィングが非常に簡単です。ブラウザが実行されているOSがMac OS XかWindowsかを検出する確実な方法はありますか?そうでない場合は、ユーザーエージェントのスニッフィングよりも優れている点は何ですか。
回答:
window.navigator.platformの UserAgent文字列が変更されたときに、プロパティが偽装されていません。Macでテストしましたが、userAgentをiPhoneまたはChrome Windowsに変更した場合、navigator.platformはMacIntelのままです。
プロパティも読み取り専用です
次の表を思いついた
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/
str.match(regexp) ? true : false
ことregexp.test(string)
です。このRegExp.prototype.test()
メソッドはネイティブにブール値を返します。したがって、私の優先コードはconst platformIsMacLike = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform);
です。
それはそれと同じくらい簡単です:
function isMacintosh() {
return navigator.platform.indexOf('Mac') > -1
}
function isWindows() {
return navigator.platform.indexOf('Win') > -1
}
次のような面白いことをすることができます:
var isMac = isMacintosh();
var isPC = !isMacintosh();
isPC
はに等しくないはず!isMacintosh();
です。ユーザーがLinuxまたはその他の異なるプラットフォームを使用している場合はどうなりますか?Mac上にないことを検出し、PC上にあると考えます。
isPC
(isWindows
またはではなくisLinux
)呼び出しました。
これはあなたが探しているものですか?それ以外の場合は、お知らせください。この投稿を削除します。
この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
これが機能するかどうか教えてください。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
}