Обнаружение телефона / планшета / веб-клиента с помощью javascript

Я пытаюсь определить, находится ли конечный пользователь на телефоне, планшете или ПК

Я некоторое время гуглил, по-видимому, нет простого решения.

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

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

Я пытаюсь используйте UserAgent (думал, что у него тоже есть свои недостатки), но не может заставить его работать, ниже приведено сочетание разных версий онлайн, которые я использую, чтобы отличить телефон / планшет от ПК, они просто не работают, и я понятия не имею, почему

var agents = ['android', 'webos', 'iphone', 'ipad', 'blackberry','iemobile','phone','mobile'];
                for(i in agents) {
                    if(navigator.userAgent.toLowerCase().match('/'+agents[i]+'/i')) {
                        return true;
                    }
                }


if( /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ) {
                return true;
            }

 if( navigator.userAgent.match(/Android/i)
                 || navigator.userAgent.match(/webOS/i)
                 || navigator.userAgent.match(/iPhone/i)
                 || navigator.userAgent.match(/iPad/i)
                 || navigator.userAgent.match(/iPod/i)
                 || navigator.userAgent.match(/BlackBerry/i)
                 || navigator.userAgent.match(/Windows Phone/i)
                 || navigator.userAgent.match(/bada/i)
                 || navigator.userAgent.match(/Bada/i)
                 ){
                return true;
            }

4 ответов


Да, вы не должны полагаться на разрешение или ориентацию. Но как насчет медиа-запросов на основе em?

чтобы прочитать результаты вашего медиа-запроса с помощью javascript, вы можете попробовать добавить медиа-запрос в свой css, чтобы добавить невидимый контент на свою страницу:

@media all and (max-width: 45em) {
    body:after {
        content: 'smallscreen';
        display: none;
    }
}

затем прочитайте содержимое через javascript:

var size = window.getComputedStyle(document.body,':after').getPropertyValue('content');

затем определите, что вы хотите загрузить:

if (size.indexOf('smallscreen') !=-1) {
    // Load some content for smaller screens.
}

пользовательские агенты довольно ненадежны и могут быть подделаны клиентами. Я бы рекомендовал сосредоточиться на конкретной функциональности, а не на конкретных устройствах. модернизатор - это библиотека, которая может использоваться для определения, доступны ли функции на клиентском устройстве. Это позволит вам определить, доступны ли такие вещи, как локальное хранилище и т. д. Если вас интересует что-то вроде Адаптивный Веб-Дизайн вместо специфических особенностей прибора / клиента, вы смогли использовать а библиотека, как Twitter загрузки. В нижней части страницы лесов он даже имеет некоторые функции, которые позволяют обнаруживать телефон против планшета против рабочего стола, хотя я считаю, что он основан на разрешении.

--Edit для добавления--

Я также хотел бы подчеркнуть, что вы должны спросить себя, Почему вас действительно волнует, на каком устройстве находится пользователь. Будет гораздо легче обнаружить конкретную функцию, о которой вы заботитесь, чем обнаружить все функции, которые доступный.


Я бы рекомендовал изучить медиа-запросы и <viewport> тег.

некоторые отличные статьи о мыслительных процессах за отзывчивым дизайном.

http://www.html5rocks.com/en/mobile/mobifying/

http://www.magazine.org/timecom-gm-craig-ettinger-bringing-responsive-web-design-iconic-brand

остается вопрос, Чего вы пытаетесь достичь?


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

Я опубликовал протестированный код, доказывающий случай android.