JavaScriptコードを使用してモバイルデバイス(iPhone/iPad/Android)の検出をシミュレートするために、実際のHTMLページ/ JavaScriptを作成するように求められました。これにより、ユーザーは別の画面に移動し、電子メールアドレスの入力を求められます。
私はこの答えが3年遅れていることを知っていますが、noneの他の答えは確かに100%正しいです。ユーザーが任意の形式のモバイルデバイス(Android、iOS、BlackBerry、Windows Phone、Kindleなど)を使用しているかどうかを検出する場合は、次のコードを使用できます。
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)) {
// Take the user to a different screen here.
}
要求元のブラウザのユーザーエージェント文字列を検出し、モバイルブラウザからのものかどうかに基づいて判断します。このデバイスは完璧ではなく、ユーザーエージェントがモバイルデバイス用に標準化されていないという事実によるものではありません(少なくとも私の知る限り)。
このサイトは、コードの作成に役立ちます。 http://www.hand-interactive.com/resources/detect-mobile-javascript.htm
例:
これを行うことにより、javascriptでユーザーエージェントを取得できます。
var uagent = navigator.userAgent.toLowerCase();
そして、これと同じ形式でチェックを行います(簡単な例としてiPhoneを使用しますが、他のものは少し異なる必要があります)
function DetectIphone()
{
if (uagent.search("iphone") > -1)
alert('true');
else
alert('false');
}
編集
次のような単純なHTMLページを作成します。
<html>
<head>
<title>Mobile Detection</title>
</head>
<body>
<input type="button" OnClick="DetectIphone()" value="Am I an Iphone?" />
</body>
</html>
<script>
function DetectIphone()
{
var uagent = navigator.userAgent.toLowerCase();
if (uagent.search("iphone") > -1)
alert('true');
else
alert('false');
}
</script>
非常に簡単な解決策は、画面の幅を確認することです。ほとんどのモバイルデバイスの最大画面幅は480px(現在)であるため、非常に信頼性が高くなります。
if( screen.width <= 480 ) {
location.href = '/mobile.html';
}
ユーザーエージェント文字列は、見る場所でもあります。ただし、前者のソリューションの方が優れています。これは、何らかの異常なデバイスがユーザーエージェントに対して正しく応答しない場合でも、画面の幅が嘘をつかないためです。
ここでの唯一の例外は、iPadのようなタブレットPCです。これらのデバイスはスマートフォンよりも画面幅が広いので、おそらくそれらにはuser-agent-stringを使用します。
if(navigator.userAgent.match(/iPad/i)){
//code for iPad here
}
if(navigator.userAgent.match(/iPhone/i)){
//code for iPhone here
}
if(navigator.userAgent.match(/Android/i)){
//code for Android here
}
if(navigator.userAgent.match(/BlackBerry/i)){
//code for BlackBerry here
}
if(navigator.userAgent.match(/webOS/i)){
//code for webOS here
}
var isMobileDevice = navigator.userAgent.match(/iPad|iPhone|iPod/i) != null
|| screen.width <= 480;
簡単な解決策はCSSのみです。スタイルシートでスタイルを設定し、その下部でスタイルを調整できます。最近のスマートフォンは、幅がわずか480ピクセルのように動作しますが、実際にはもっと広いです。 cssで小さい画面を検出するコードは
@media handheld, only screen and (max-width: 560px), only screen and (max-device-width: 480px) {
#hoofdcollumn {margin: 10px 5%; width:90%}
}
お役に立てれば!
現在は2015年なので、この質問に出くわした場合は、おそらく window.matchMedia を使用する必要があります(さらに、2015年の場合は、古いブラウザーでは polyfilling ):
if (matchMedia('handheld').matches) {
//...
} else {
//...
}
だから私はこれをやった。皆さん、ありがとうございました!
<head>
<script type="text/javascript">
function DetectTheThing()
{
var uagent = navigator.userAgent.toLowerCase();
if (uagent.search("iphone") > -1 || uagent.search("ipad") > -1
|| uagent.search("Android") > -1 || uagent.search("blackberry") > -1
|| uagent.search("webos") > -1)
window.location.href ="otherindex.html";
}
</script>
</head>
<body onload="DetectTheThing()">
VIEW NORMAL SITE
</body>
</html>
mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)
を使用します
ユーザーエージェント文字列を使用して、これを検出できます。
var useragent = navigator.userAgent.toLowerCase();
if( useragent.search("iphone") )
; // iphone
else if( useragent.search("iPod") )
; // iPod
else if( useragent.search("Android") )
; // Android
etc
ここでユーザーエージェント文字列のリストを見つけることができます http://www.useragentstring.com/pages/useragentstring.php
チェックアウトすることをお勧めします http://wurfl.io/
簡単に言えば、小さなJSファイルをインポートする場合:
<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>
次のようなJSONオブジェクトが残ります。
{
"complete_device_name":"Google Nexus 7",
"is_mobile":true,
"form_factor":"Tablet"
}
(もちろん、Nexus 7を使用していることを前提としています)、次のようなことができるようになります。
WURFL.complete_device_name
これはあなたが探しているものです。
免責事項:私はこの無料サービスを提供する会社で働いています。ありがとう。
これは、ウェブページがデスクトップアプリまたはモバイルアプリに読み込まれているかどうかを確認する方法の例です。
JSはページのロード時に実行され、バーコードスキャナーを非表示にするなど、ページのロード時にデスクトップ固有の操作を実行できます。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
/*
* Hide Scan button if Page is loaded in Desktop Browser
*/
function hideScanButtonForDesktop() {
if (!(/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent))) {
// Hide scan button for Desktop
document.getElementById('btnLinkModelScan').style.display = "none";
}
}
//toggle scanButton for Desktop on page load
window.onload = hideScanButtonForDesktop;
</script>
</head>
シミュレートする必要があるデバイスのユーザーエージェントが何であるかを判断し、それに対して変数をテストします。
例えば:
// var userAgent = navigator.userAgent.toLowerCase(); // this would actually get the user agent
var userAgent = "iphone"; /* Simulates User Agent for iPhone */
if (userAgent.indexOf('iphone') != -1) {
// some code here
}
DeviceDetection を使用するだけです
deviceDetection.deviceType // phone | tablet according to device
ハックの適切な解決策を探して(成功しなかったように)、それでもここにハックを追加したいと思います。モバイルとデスクトップの最も大きな違いと思われるデバイスの向きのサポートを確認するだけです。
var is_handheld = 0; //単なるグローバルif(window.DeviceOrientationEvent){is_handheld = 1;}
そうは言っても、ページはモバイル/デスクトップレイアウトの手動選択を提供する必要があります。私は1920 * 1080を取得し、ズームインすることができます-単純化され機能が削減されたwordpressoidチャンクは必ずしも良いことではありません。特に、非稼働デバイスの検出に基づいてレイアウトを強制する-それは常に発生します。
別の可能性は、 mobile-detect.js を使用することです。 デモ を試してください。
<script src="mobile-detect.js"></script>
<script>
var md = new MobileDetect(window.navigator.userAgent);
// ... see below
</script>
var MobileDetect = require('mobile-detect'),
md = new MobileDetect(req.headers['user-agent']);
// ... see below
var md = new MobileDetect(
'Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; SonyEricssonMT11i' +
' Build/4.1.A.0.562) AppleWebKit/534.30 (KHTML, like Gecko)' +
' Version/4.0 Mobile Safari/534.30');
// more typically we would instantiate with 'window.navigator.userAgent'
// as user-agent; this string literal is only for better understanding
console.log( md.mobile() ); // 'Sony'
console.log( md.phone() ); // 'Sony'
console.log( md.tablet() ); // null
console.log( md.userAgent() ); // 'Safari'
console.log( md.os() ); // 'AndroidOS'
console.log( md.is('iPhone') ); // false
console.log( md.is('bot') ); // false
console.log( md.version('Webkit') ); // 534.3
console.log( md.versionStr('Build') ); // '4.1.A.0.562'
console.log( md.match('PlayStation|xbox') ); // false
これは私のバージョンで、上のバージョンと非常に似ていますが、参考にすると思います。
if (mob_url == "") {
lt_url = desk_url;
} else if ((useragent.indexOf("iPhone") != -1 || useragent.indexOf("Android") != -1 || useragent.indexOf("Blackberry") != -1 || useragent.indexOf("Mobile") != -1) && useragent.indexOf("iPad") == -1 && mob_url != "") {
lt_url = mob_url;
} else {
lt_url = desk_url;
}
ユーザーエージェントに基づくデバイス検出はあまり良いソリューションではありません。タッチデバイスのような機能を検出する方が良いです(新しいjQueryでは$.browser
を削除し、代わりに$.support
を使用します)。
モバイルを検出するには、タッチイベントを確認できます。
function is_touch_device() {
return 'ontouchstart' in window // works on most browsers
|| 'onmsgesturechange' in window; // works on ie10
}
上記のいくつかの答えに似ています。この単純な関数は、私にとって非常にうまく機能します。 2019年現在
function IsMobileCard()
{
var check = false;
(function(a){if(/(Android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|Kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|Palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
return check;
}
ユーザーエージェントのテストは複雑で煩雑で、常に失敗します。また、「ハンドヘルド」のメディアマッチが私のために機能していることもわかりませんでした。最も簡単な解決策は、マウスが使用可能かどうかを検出することでした。そして、それは次のように行うことができます:
var result = window.matchMedia("(any-pointer:coarse)").matches;
ホバーアイテムを表示する必要があるかどうか、および物理ポインターを必要とするその他のものを表示します。その後、幅に基づいてさらにメディアクエリでサイジングを実行できます。
次の小さなライブラリは、上記のクエリのベルトブレースバージョンで、ほとんどの「マウスのないタブレットまたは携帯電話」シナリオをカバーするはずです。
https://patrickhlauke.github.io/touch/touchscreen-detection/
メディアの一致は2015年以降サポートされており、互換性はこちらで確認できます: https://caniuse.com/#search=matchMedia
つまり、画面がタッチスクリーンかどうか、および画面のサイズに関連する変数を維持する必要があります。理論的には、マウス操作のデスクトップに小さな画面を置くことができます。