Как обнаружить мобильное устройство с помощью JavaScript? - PullRequest
72 голосов
/ 12 июля 2011

Меня попросили создать реальную HTML-страницу / JavaScript для имитации обнаружения мобильных устройств (iPhone / iPad / Android) с использованием кода JavaScript. После этого пользователь перейдет на другой экран, который запрашивает у него адрес электронной почты.

Ответы [ 20 ]

3 голосов
/ 11 марта 2014

Я советую вам проверить 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

Это то, что вы ищете.

Отказ от ответственности: Я работаю в компании, которая предлагает этот бесплатный сервис.Спасибо.

2 голосов
/ 08 ноября 2016

Это пример того, как проверить, загружена ли веб-страница в настольном или мобильном приложении.

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>
1 голос
/ 12 июля 2011

Определите, что представляет собой пользовательский агент для устройств, которые необходимо смоделировать, и затем протестируйте переменную на этом уровне.

например:

// 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
}
0 голосов
/ 23 ноября 2017

Поскольку я (вроде безуспешно) искал подходящее решение для своего взлома, тем не менее, я хочу добавить сюда свой взлом: я просто проверяю поддержку ориентации устройства, которая кажется наиболее существенным различием между мобильными и настольными компьютерами:

var is_handheld = 0; // просто глобальный if (window.DeviceOrientationEvent) {is_handheld = 1;}

При этом, imho, страница также должна предлагать ручной выбор между мобильным или настольным макетом. У меня 1920 * 1080, и я могу увеличить масштаб - слишком упрощенный и уменьшенный по массе блок Wordpressoid - не всегда хорошая вещь. Особенно форсирование макета на основе обнаружения неработающего устройства - это происходит постоянно.

0 голосов
/ 26 октября 2016

Другая возможность - использовать mobile-detect.js . Попробуйте демо .

Использование браузера:

<script src="mobile-detect.js"></script>
<script>
    var md = new MobileDetect(window.navigator.userAgent);
    // ... see below
</script>

Node.js / Express:

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
0 голосов
/ 03 сентября 2013

Это моя версия, очень похожая на верхнюю, но я думаю, что для справки.

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;
}
0 голосов
/ 18 июля 2014

Просто используйте DeviceDetection

deviceDetection.deviceType // phone | tablet according to device
0 голосов
/ 15 марта 2019

Тестирование для пользовательского агента является сложным, грязным и неизменно терпит неудачу.Я также не обнаружил, что совпадение средств массовой информации для «портативного» работает на меня.Самым простым решением было определить, была ли мышь доступна.И это можно сделать так:

var result = window.matchMedia("(any-pointer:coarse)").matches;

Это скажет вам, нужно ли показывать элементы при наведении или нет, и все остальное, что требует физического указателя.Затем можно выполнить определение размера для дальнейших медиазапросов на основе ширины.

Следующая небольшая библиотека представляет собой версию запроса с поясными скобками, которая должна охватывать большинство сценариев «Вы планшет или телефон без мыши».

https://patrickhlauke.github.io/touch/touchscreen-detection/

Соответствия носителей поддерживаются с 2015 года, и вы можете проверить совместимость здесь: https://caniuse.com/#search=matchMedia

Короче говоря, вы должны поддерживать переменные, относящиеся к тому,экран сенсорный экран, а также, какой размер экрана.В теории у меня мог бы быть крошечный экран на рабочем столе, управляемом мышью.

0 голосов
/ 20 мая 2019

Аналогично нескольким ответам выше.Эта простая функция очень хорошо работает для меня.Это актуально на 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;   
}
0 голосов
/ 06 мая 2014

Обнаружение устройства на основе пользовательского агента - не очень хорошее решение, лучше обнаруживать такие функции, как сенсорное устройство (в новом jQuery они удаляют $.browser и вместо него используют $.support).

Для обнаружения мобильного телефона вы можете проверить сенсорные события:

function is_touch_device() {
  return 'ontouchstart' in window // works on most browsers 
      || 'onmsgesturechange' in window; // works on ie10
}

Взято из Какой лучший способ обнаружить устройство с «сенсорным экраном» с помощью JavaScript?

...