如何使用JavaScript检测移动设备?

我被要求创build一个实际的HTML页面/ JavaScript来模拟使用JavaScript代码检测移动设备(iPhone / iPad / Android)。 然后这将使用户到另一个屏幕,要求他们的电子邮件地址。

我知道这个答案迟了3年,但没有其他答案确实是100%正确的。 如果您想要检测用户是否使用任何forms的移动设备(Android,iOS,BlackBerry,Windows Phone,Kindle等),则可以使用以下代码:

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent)) { // Take the user to a different screen here. } 

您将检测到请求的浏览器用户代理string,然后根据它来自移动浏览器的内容来决定它。 这个设备并不完美,从来不会因为用户代理没有针对移动设备进行标准化(至less不是我所知)。

本网站将帮助您创build代码: http : //www.hand-interactive.com/resources/detect-mobile-javascript.htm

例如

您可以通过执行以下操作在JavaScript中获取用户代理:

 var uagent = navigator.userAgent.toLowerCase(); 

然后按照与此相同的格式进行检查(仅仅使用iPhone作为一个简单的例子,但其他的则需要有点不同)

 function DetectIphone() { if (uagent.search("iphone") > -1) alert('true'); else alert('false'); } 

编辑

你会创build一个简单的HTML页面,如下所示:

 <html> <head> <title>Mobile Detection</title> </head> <body> <input type="button" OnClick="DetectIphone()" value="Am I an Iphone?" /> </body> </html> <script> function DetectIphone() { var uagent = navigator.userAgent.toLowerCase(); if (uagent.search("iphone") > -1) alert('true'); else alert('false'); } </script> 

一个非常简单的解决scheme是检查屏幕宽度。 由于几乎所有移动设备的最大屏幕宽度都是480像素(目前),因此非常可靠:

 if( screen.width <= 480 ) { location.href = '/mobile.html'; } 

用户代理string也是一个看看的地方。 然而,前者的解决scheme还是比较好,即使有些怪异的设备对用户代理没有正确的响应,屏幕宽度也不会说谎。

这里唯一的例外是平板电脑就像ipad。 这些设备有比智能手机更高的屏幕宽度,我可能会用这些用户代理string。

 if(navigator.userAgent.match(/iPad/i)){ //code for iPad here } if(navigator.userAgent.match(/iPhone/i)){ //code for iPhone here } if(navigator.userAgent.match(/Android/i)){ //code for Android here } if(navigator.userAgent.match(/BlackBerry/i)){ //code for BlackBerry here } if(navigator.userAgent.match(/webOS/i)){ //code for webOS here } 
 var isMobileDevice = navigator.userAgent.match(/iPad|iPhone|iPod/i) != null || screen.width <= 480; 

一个简单的解决scheme可能只是CSS。 您可以在样式表中设置样式,然后在底部调整样式。 现代智能手机的performance就像他们只有480px宽,而他们实际上更多。 在css中检测较小屏幕的代码是

 @media handheld, only screen and (max-width: 560px), only screen and (max-device-width: 480px) { #hoofdcollumn {margin: 10px 5%; width:90%} } 

希望这可以帮助!

我使用mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)

所以我做了这个。 谢谢你们!

 <head> <script type="text/javascript"> function DetectTheThing() { var uagent = navigator.userAgent.toLowerCase(); if (uagent.search("iphone") > -1 || uagent.search("ipad") > -1 || uagent.search("android") > -1 || uagent.search("blackberry") > -1 || uagent.search("webos") > -1) window.location.href ="otherindex.html"; } </script> </head> <body onload="DetectTheThing()"> VIEW NORMAL SITE </body> </html> 

既然现在是2015年,如果你偶然发现这个问题,那么你可能应该使用window.matchMedia (如果它仍然是2015年,老年浏览器的polyfilling ):

 if (matchMedia('handheld').matches) { //... } else { //... } 

您可以使用用户代理string来检测这个。

 var useragent = navigator.userAgent.toLowerCase(); if( useragent.search("iphone") ) ; // iphone else if( useragent.search("ipod") ) ; // ipod else if( useragent.search("android") ) ; // android etc 

你可以在这里finduseragentstring的列表http://www.useragentstring.com/pages/useragentstring.php

我build议你看看http://wurfl.io/

简而言之,如果您导入一个微小的JS文件:

 <script type='text/javascript' src="//wurfl.io/wurfl.js"></script> 

您将留下一个JSON对象,如下所示:

 { "complete_device_name":"Google Nexus 7", "is_mobile":true, "form_factor":"Tablet" } 

(当然假设你使用的是Nexus 7),你将可以执行如下操作:

 WURFL.complete_device_name 

这是你在找什么。

免责声明:我为提供这项免费服务的公司工作。 谢谢。

确定用户代理用于需要模拟的设备,然后根据该variablestestingvariables。

例如:

 // var userAgent = navigator.userAgent.toLowerCase(); // this would actually get the user agent var userAgent = "iphone"; /* Simulates User Agent for iPhone */ if (userAgent.indexOf('iphone') != -1) { // some code here } 

这是如何检查网页是否在桌面或移动应用程序加载的例子。

JS将在页面加载执行,你可以在页面加载时执行桌面特定的东西,例如隐藏条形码扫描器。

  <!DOCTYPE html> <html> <head> <script type="text/javascript"> /* * Hide Scan button if Page is loaded in Desktop Browser */ function hideScanButtonForDesktop() { if (!(/Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent))) { // Hide scan button for Desktop document.getElementById('btnLinkModelScan').style.display = "none"; } } //toggle scanButton for Desktop on page load window.onload = hideScanButtonForDesktop; </script> </head> 

这是我的版本,非常类似于上面的版本,但我认为很好的参考。

 if (mob_url == "") { lt_url = desk_url; } else if ((useragent.indexOf("iPhone") != -1 || useragent.indexOf("Android") != -1 || useragent.indexOf("Blackberry") != -1 || useragent.indexOf("Mobile") != -1) && useragent.indexOf("iPad") == -1 && mob_url != "") { lt_url = mob_url; } else { lt_url = desk_url; } 

从Mozilla开发者站点: 设备特定的用户代理string

我觉得这个更精确一些,特别是针对移动设备的过滤。

基于用户代理的设备检测并不是很好的解决scheme,更好的办法是检测触摸设备等function(在新的jQuery中,他们删除了$.browser ,而是使用$.support )。

要检测手机,您可以检查触摸事件:

 function is_touch_device() { return 'ontouchstart' in window // works on most browsers || 'onmsgesturechange' in window; // works on ie10 } 

采取从什么是使用JavaScript检测“触摸屏”设备的最佳方式?

只需使用DeviceDetection

 deviceDetection.deviceType // phone | tablet according to device 

另一种可能是使用mobile-detect.js 。 尝试演示 。

浏览器用法:

 <script src="mobile-detect.js"></script> <script> var md = new MobileDetect(window.navigator.userAgent); // ... see below </script> 

Node.js / Express:

 var MobileDetect = require('mobile-detect'), md = new MobileDetect(req.headers['user-agent']); // ... see below 

例:

 var md = new MobileDetect( 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; SonyEricssonMT11i' + ' Build/4.1.A.0.562) AppleWebKit/534.30 (KHTML, like Gecko)' + ' Version/4.0 Mobile Safari/534.30'); // more typically we would instantiate with 'window.navigator.userAgent' // as user-agent; this string literal is only for better understanding console.log( md.mobile() ); // 'Sony' console.log( md.phone() ); // 'Sony' console.log( md.tablet() ); // null console.log( md.userAgent() ); // 'Safari' console.log( md.os() ); // 'AndroidOS' console.log( md.is('iPhone') ); // false console.log( md.is('bot') ); // false console.log( md.version('Webkit') ); // 534.3 console.log( md.versionStr('Build') ); // '4.1.A.0.562' console.log( md.match('playstation|xbox') ); // false