使用Javascript检测桌面浏览器(不是移动设备)

fab*_*ian 25 javascript mobile

我找到了以下代码来检测桌面浏览器.但该方法还会检测一些移动浏览器.如何只检测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" };
},
Run Code Online (Sandbox Code Playgroud)

sky*_*dev 21

在尝试找出哪个浏览器时,jQuery.browser会很有帮助. jQuery.browser在jQuery 1.9中删除了.

我相信它基于navigator.UserAgent,但navigator.UserAgent可以根据需要自行告诉您操作系统.

试试这个:

var isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i)
Run Code Online (Sandbox Code Playgroud)

资源

  • `jQuery.browser`在jQuery中不推荐使用.不能再使用它了. (6认同)

tim*_*tim 13

我检查一下

('ontouchstart' in window)
Run Code Online (Sandbox Code Playgroud)

因为那会告诉我,我是否使用触控设备.当然,对于可能不被视为"移动设备"的ipad也会返回true,但我只是检查window.width布局目的.

  • 这种方法对于支持触摸的桌面(如Microsoft的Surface和许多其他Windows 8笔记本电脑)都会出现误报. (15认同)
  • @LajosMeszaros在Windows的桌面Chrome下返回“ false”。 (2认同)

htt*_*ete 8

我想出了这个:

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

它利用了我们可以坚持的两件事.一,window.screenX在任何平板电脑/移动设备上总是0.您无法在这些设备上移动窗口,它始终是全屏的.

二,isTouchDevice是一种非常可靠的方式来了解它是否是移动(android/iphone平板电脑)或Windows Surfacey的东西.它有一个触摸事件.结合这两者使我们高度确定它是移动设备或平板电脑.如果您不是其中之一,则必须是桌面版.

是的,您可能有一个桌面,以某种方式将自己报告为触摸,并将浏览器maxxed到左上角.就我而言,我可以放手.

  • `window.screenX != 0 &amp;&amp; !isTouchDevice() ? true : false;` 你可以把它写成更短的`window.screenX != 0 &amp;&amp; !isTouchDevice();` (2认同)

小智 6

我一直在调查我的ReView(响应视口)项目.我使用以下组合.

  • window.screenX

大多数移动浏览器都将"窗口"锁定在左侧.因此,如果这不是零,则可能是桌面浏览器窗口.

  • window.devicePixelRatio和screen.width

如果dpr为1,屏幕宽度通过screen.width报告为大,可能是桌面.

  • window.orientation

在纵向模式下很难找到桌面显示器.但是,这可能发生.

使用您的网站/应用时,更不可能出现多方位更改.这意味着桌面用户将旋转他们的屏幕......非常不可能.

这些与一些常识的组合,你可以实现一个非常可靠的猜测.

提到的项目以及更多信息请访问http://responsiveviewport.com

希望有所帮助.


小智 1

您的脚本的问题是,它只是尝试使用UserAgent-string 检测浏览器,这不太准确,因为每个人都可以伪造他的UserAgent.

有关浏览器检测的详细阅读,请查看此链接:http://www.quirksmode.org/js/detect.html

  • 但显然,如果用户打算扰乱他们的用户代理,那么他们就会出现奇怪的行为,不是吗? (2认同)