使用Javascript检测桌面浏览器(非移动)

使用Javascript检测桌面浏览器(非移动),javascript,mobile,Javascript,Mobile,我发现以下代码用于检测桌面浏览器。但该方法也检测一些移动浏览器。如何仅检测Safari、IE、Firefox、Opera等桌面浏览器 is_desktopBrowser : function() { var ua = navigator.userAgent.toLowerCase(); var rwebkit = /(webkit)[ \/]([\w.]+)/; var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;

我发现以下代码用于检测桌面浏览器。但该方法也检测一些移动浏览器。如何仅检测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" };
},
is_desktopBrowser:function(){
var ua=navigator.userAgent.toLowerCase();
var rwebkit=/(webkit)[\/]([\w.]+)/;
变量ropera=/(opera)(?:.*版本)?[\/]([\w.]+)/;
变量rmsie=/(msie)([\w.]+)/;
var rmozilla=/(mozilla)(?:.*rv:([\w.]+)?/;
var match=rwebkit.exec(ua)||
首席执行官(ua)||
rmsie.执行官(ua)||
ua.indexOf(“兼容”)<0&&rmozilla.exec(ua)||
[];
返回{浏览器:匹配[1]| |“”,版本:匹配[2]| |“0”};
},

脚本的问题是,它只是试图用
UserAgent
-字符串检测浏览器,但该字符串不太准确,因为每个人都可以伪造自己的
UserAgent

有关浏览器检测的详细信息,请查看以下链接:

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

我相信它是基于navigator.UserAgent的,但是如果您愿意,navigator.UserAgent可以自己告诉您操作系统

试试这个:

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

我一直在为我的ReView(Responsive Viewport)项目调查这个问题。我使用以下的组合

  • window.screenX
大多数移动浏览器的“窗口”都锁定在左侧。因此,如果这不是零,可能是一个桌面浏览器窗口

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

  • 窗口定向
很少能在纵向模式下找到桌面显示器。然而,这可能发生

更不可能的是,在使用您的网站/应用程序时发生多方位更改。这意味着桌面用户将旋转他们的屏幕。。。不太可能

将这些结合起来,再加上一些常识,你就能得到一个相当可靠的猜测

所提到的项目以及更多信息位于

希望能有所帮助。

我想到了这个:

    var isTouchDevice = function() {  return 'ontouchstart' in window || 'onmsgesturechange' in window; };
    var isDesktop = window.screenX != 0 && !isTouchDevice() ? true : false;
它利用了我们可以抓住的两件事。第一,window.screenX在任何平板电脑/移动设备上都将始终为0。你不能在这些设备上移动窗口,它总是全屏的

第二,iTouch设备是一种非常可靠的方式,可以知道它是移动设备(android/iphone平板电脑)还是Windows Surfacey。它有一个触摸事件。将两者结合起来,我们可以高度肯定它是一款手机或平板电脑。如果你不是这些人中的一员,你一定是桌面

是的,您可能有一个桌面,它以某种方式将自己报告为touch,并在左上角将浏览器设置为maxx。在我的情况下,我可以放手。

您可以转到并生成一个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)));
我查一下

('ontouchstart' in window)

因为这会告诉我我是否使用了触控设备。当然,对于ipad来说也是如此,它可能不被视为“移动设备”,但为了布局的目的,我只需检查
窗口宽度

只需包含js文件,它会将名为“NoTouch”的类添加到所有桌面浏览器中,这样你就可以轻松地使用这些类,即使对你的情况来说有点过分,是最好的解决方案之一,因为它可以在服务器和浏览器上使用。你的情况:

在HTML中包含js文件

<script type="text/javascript" src="/path/to/express-useragent.js"></script>
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..."
}

事实上,很容易检测到移动或平板设备,然后通过简单的结果反转,我们可以理解这是桌面还是非桌面,为了便于访问,我编写了一个简单的函数:

const isDesktop=()=>{
常量导航代理=
navigator.userAgent | | navigator.vendor | | | window.opera;
回来(
/“手机”移动方:前去去去方(1244)的巴达纳(Badaa)的一个死亡死亡方的一个周四;黑莓(黑莓)的布雷泽方(1244)的比赛方方(1244)的伯拉尼安(安安卓)的bb\bb\d d+以及MeGo前往方(android)的一个周日周日周日周日(android(安安安安安安卓(android)的bb\bb\d)的一个d+和d+以及以及d+路障障障(安安安安安安安安安安安(android)的周四周四周四周四周四)的BBD+方方的一方的一个周日周日周日周日的一个周日周日周日周日周日周日周日周日周日的B+以及以及以及以及以及以及以及以及以及d d d d+和d+以及以及d+以及以及以及以及以及以及以及d d+卡托托托托托卡卡卡卡卡卡卡迪迪迪德(路路路路路障障障障障的psp系列([46])0 | symbian | treo | up\(浏览器链接)|沃达丰| wap | windows ce | xda | Xino | android | ipad | playbook | silk/i.test(
导航代理
) ||
/12月7日,12月12日,6月7日,6月7日,6月7日,6月7日,6日,7月7日,6日,7月7日,6日,7月7日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10日,10(2)B(2)B(ac(12)az)的)br(ev)的(ev)瓦瓦瓦尼(12)瓦瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)瓦尼(12)和(12)瓦尼(12)瓦尼(12)瓦尼(12)准(12)准(12)准(12)准(12)瓦尼(12)准(12)准(12)是)准(12)是)准(12)是)是)是(12)是(12)准(12)准(12)准(12)是)是)的)的)是(12)准(12)是(12)准(12)的)是(12)的;do([cp])o|ds(12 |-d)| el(49 | ai)| em(4-7)0 0岁以上的运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商)运营商(4-7)和瓦瓦瓦瓦瓦瓦萨(12)泽)泽)泽)泽)泽)他们(4-泽)运营商(4-4-4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(4-7)运营商(本本本本次)运营商)运营商(本本次)的运营商(12岁)运营商(本本本本本周四)的运营商(12)的(3)ht(c(0-agpst)和(c(0-0-agpst)tp)胡(aw(124)tc)我(2)我(20(12)去,去,马(12)去,马)和i230(c(c)T(c(c)和(3)和(3)c(c)和(c)c(c(c)c(c(c)和(c(c)和(c(c)和(c)和(c(c)和(c(c)和(c(c)和(c)和(c(c)和(c)和(c(c)和(c(c)和(c(c)和(c(c)和(c)和(c)和(c)和(c(c)和(c(c)和(c)和(c)和(c(c(c(c)和(c)和(c)和(c)和(c)和(c(c)和(c| le(no | xi)| lg(g | \/([klu])|5月50日54124周四周四周四周四周四周四周四周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五(02)n50([025)以及n7(0([01])| 10)n7(0([01[01])| 10)n7(0([01])| mywa||| mywa| n10)n10(10)n10(10)n10(10)和n10(0(10)n7(0(([01])1240([01])1245)10)10)奈亚(10)尼(([1(([01)10)尼(([01)任何([01)10)尼((([1)10)尼(([[1)任何(([01)10)10)尼([1)尼([1)任何([1)任何(([1)任何([1)和(([1)任何([1)10)尼([1)尼([1)尼([1)尼([1)尼([菲尔|皮雷| pl(坎特伯雷大学)| pn-2 | po本次(ck)的研究者们(ck)的研究者们(ck)的研究者们(ck)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)的研究者们(c)a)的质量控制(71244)12(121244)21(121244)21124;32(12)211244)32(6)60(6)601244)60(6)601244)601244)60124四四四四六六六六(6(6)6(6)6(6)6(6)6(6)6)6(6)6(6)6(6)6)6(6)6)6(6)6)6(6)6)6(6)6)6(1-0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0(1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))1(45(45(1)id)id)1)1)1)1(45(1)id)身份身份身份身份)))))0 0(1(0 0(1)sm(1(1)sm(0(1)sm(0(0(0(1))))0(0(1(1)))0 0 0(1(1(0(1))0 0 0(1(;tcl-| tdg-|电话([im])| tim-| t-mo | t
{
  "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..."
}