Обнаружение настольного браузера (не мобильного) с помощью Javascript

Я нашел следующий код для обнаружения настольного браузера. Но этот метод также обнаруживает некоторые мобильные браузеры. Как я могу обнаружить только настольные браузеры, такие как Safari, IE, Firefox, Opera и т. Д.?

is_desktopBrowser : function() {
    var ua = navigator.userAgent.toLowerCase();

    var rwebkit = /(webkit)[ \/]([\w.]+)/;
    var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;
    var rmsie = /(msie) ([\w.]+)/;
    var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;

    var match = rwebkit.exec(ua) ||
            ropera.exec(ua) ||
            rmsie.exec(ua) ||
            ua.indexOf("compatible") < 0 && rmozilla.exec(ua) ||
            [];

    return { browser: match[1] || "", version: match[2] || "0" };
},
25
задан dgvid 11 January 2013 в 17:44
поделиться

7 ответов

jQuery.browser может быть полезен при попытке выяснить, какой браузер. jQuery.browser был удален в jQuery 1.9.

Я полагаю, что он основан на navigator.UserAgent, однако navigator.UserAgent может рассказать вам об ОС самостоятельно, если хотите.

Попробуйте это:

var isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i)

источник

21
ответ дан 28 November 2019 в 21:02
поделиться

Я проверяю на

('ontouchstart' in window)

, так как это скажет мне, если я на сенсорном устройстве. Конечно, это также возвращает true для ipad, который не может считаться «мобильным устройством», но тогда я просто проверяю window.width для целей макета.

13
ответ дан 28 November 2019 в 21:02
поделиться

Я придумал это:

    var isTouchDevice = function() {  return 'ontouchstart' in window || 'onmsgesturechange' in window; };
    var isDesktop = window.screenX != 0 && !isTouchDevice() ? true : false;

Он использует две вещи, которые мы можем придерживаться. Во-первых, window.screenX ВСЕГДА будет 0 на любом планшете / мобильном устройстве. На этих устройствах нельзя перемещать окна, это всегда полноэкранный режим.

Во-вторых, isTouchDevice - довольно надежный способ узнать, мобильное ли это устройство (планшет на android / iphone) или Windows Surfacey. Это сенсорное событие. Объединение этих двух дает нам высокую степень уверенности, что это мобильный телефон или планшет. Если вы не один из них, вы должны быть на рабочем столе.

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

8
ответ дан 28 November 2019 в 21:02
поделиться

Вы можете перейти на http://detectmobilebrowsers.com и сгенерировать JS-скрипт, который будет определять, является ли браузер мобильным браузером. Если вы не беспокоитесь о смарт-телевизорах или других мобильных или настольных устройствах, вы можете использовать этот сценарий и предположить, что если браузер НЕ является мобильным браузером, то он должен быть настольным браузером.

Вот пример решения с использованием регулярных выражений, сгенерированных этим сайтом:

var ua = navigator.userAgent.toLowerCase();
var isDesktop = !(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|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|phone)|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)));
2
ответ дан 28 November 2019 в 21:02
поделиться

Даже для вашего случая это немного излишне, express-useragent - одно из лучших решений, поскольку его можно использовать как на сервере, так и в браузере. Ваш случай:

Включить файл js в HTML

<script type="text/javascript" src="/path/to/express-useragent.js"></script>

Выполнить плагин

var userAgent = new UserAgent().parse(navigator.userAgent);

Значение userAgent будет примерно таким

{
  "isMobile":false,
  "isDesktop":true,
  "isBot":false,
  .....
  "browser":"Chrome",
  "version":"17.0.963.79",
  "os":"Windows 7",
  "platform":"Microsoft Windows",
  "source":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79..."
}
2
ответ дан 28 November 2019 в 21:02
поделиться

это не сработает?

window.addEventListener('mousemove', function(){
    // whatever code you want to have on desktop
});
-9
ответ дан 28 November 2019 в 21:02
поделиться

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

Для довольно хорошего чтения по обнаружению браузера, перейдите по этой ссылке: http://www.quirksmode.org/js/detect.html

1
ответ дан 28 November 2019 в 21:02
поделиться