Я нашел следующий код для обнаружения настольного браузера. Но этот метод также обнаруживает некоторые мобильные браузеры. Как я могу обнаружить только настольные браузеры, такие как 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" };
},
jQuery.browser может быть полезен при попытке выяснить, какой браузер. S> jQuery.browser
был удален в jQuery 1.9.
Я полагаю, что он основан на navigator.UserAgent, однако navigator.UserAgent может рассказать вам об ОС самостоятельно, если хотите.
Попробуйте это:
var isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i)
Я проверяю на
('ontouchstart' in window)
, так как это скажет мне, если я на сенсорном устройстве. Конечно, это также возвращает true для ipad, который не может считаться «мобильным устройством», но тогда я просто проверяю window.width
для целей макета.
Я придумал это:
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. Это сенсорное событие. Объединение этих двух дает нам высокую степень уверенности, что это мобильный телефон или планшет. Если вы не один из них, вы должны быть на рабочем столе.
Да, у вас может быть рабочий стол, который каким-то образом сообщает о себе как о касании и имеет максимальный браузер в левом верхнем углу. В моем случае я могу это отпустить.
Вы можете перейти на 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)));
Даже для вашего случая это немного излишне, 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..."
}
это не сработает?
window.addEventListener('mousemove', function(){
// whatever code you want to have on desktop
});
Проблема с вашим скриптом в том, что он просто пытается обнаружить браузер с помощью строки UserAgent
, которая не совсем точна, потому что каждый может подделать его UserAgent
.
Для довольно хорошего чтения по обнаружению браузера, перейдите по этой ссылке: http://www.quirksmode.org/js/detect.html