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

IT技术 javascript html mobile device
2021-01-26 13:26:20

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

6个回答

我知道这个答案即将到来晚了3年,但没有其他的答案确实是100%正确的。如果您想检测用户是否使用任何形式的移动设备(Android、iOS、黑莓、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.
}
你需要某种图书馆吗?我怀疑就是这么简单。
2021-03-17 13:26:20
我也会添加关键字“移动”。
2021-03-23 13:26:20

您将检测请求浏览器的用户代理字符串,然后根据它是否来自移动浏览器来决定它是什么。这个设备并不完美,而且永远不会是因为用户代理没有针对移动设备进行标准化(至少据我所知)。

该站点将帮助您创建代码: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');
}

编辑

您将创建一个简单的 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>
聪明 - 从来没有想过:D
2021-03-21 13:26:20
但我想知道什么是开始?创建一个虚拟网页并将此代码嵌入其中。我们将在其中使用 html,因为正如我在上面的代码中提到的,我没有什么可开始的。
2021-03-27 13:26:20
伟大的!!!!感谢那。如何将其重定向到不同的页面。你认为这样的事情会有帮助吗?if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/Android/i))) { if (document .cookie.indexOf("iphone_redirect=false") == -1) window.location = " m.espn.go.com/wireless/?iphone&i=COMR ";
2021-04-06 13:26:20
不要忘记用户代理可以更改、欺骗并且可能无法反映当前浏览器。话虽如此,如果客户端欺骗/更改他们的 UserAgent 而您显示错误的视图,那是他们自己的错。尽管用户代理通常是所有检测的根,但除了纯用户代理之外,还有其他方法。这里有一个非常好的(虽然已经过时)示例github.com/ahand/mobileesp?files=1
2021-04-12 13:26:20

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

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

用户代理字符串也是一个查看的地方。然而,前一种解决方案仍然更好,因为即使某些该死的设备没有正确响应用户代理,屏幕宽度也不会撒谎。

这里唯一的例外是平板电脑,如 ipad。这些设备的屏幕宽度比智能手机大,我可能会使用 user-agent-string。

对!!我只需要检测 iPhone 或 Android。所以这不应该是一个问题,但只是让你知道我绝对没有什么可开始的。我要创建一个虚拟网页并嵌入它吗!另外,如何检查检测?我需要将脚本传输到手机上吗?
2021-03-27 13:26:20
我的,屏幕宽度如何改变;)
2021-04-11 13:26:20
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 
}
这是最好和最干净的解决方案
2021-03-13 13:26:20
你是对的,不要忘记代码是 4 年前的 :) 现在有更好的工具或方法来完成同样的工作
2021-04-05 13:26:20
尽管这段代码不会执行多个块,因为它一遍又一遍地检查一件事,由于这个原因,这段代码应该使用 else-if 块。另外,如果用户代理变量在块之间发生了某种变化怎么办?它将在这里执行 1 个以上的块。
2021-04-08 13:26:20
var isMobileDevice = navigator.userAgent.match(/iPad|iPhone|iPod/i) != null 
    || screen.width <= 480;
+1 用于正则表达式匹配,允许用户一次性轻松检查多个设备。但是,为了清楚起见,我要补充一点,因为您在正则表达式的末尾表示 /i 以进行不敏感匹配,因此确实不需要骆驼大小写搜索参数。以下将是等效的(并且还搜索 android 设备): .match(/ipad|iphone|ipod|android/i)
2021-03-18 13:26:20