【问题标题】:Detecting useragent works for android but not iphone?检测用户代理适用于 android 但不适用于 iphone?
【发布时间】:2020-05-19 19:48:07
【问题描述】:

目标:检测用户是否在 iPhone/iPad/Android(移动设备)上并根据该条件运行一些代码

问题/发生了什么:它似乎检测到 android,但没有检测到 iPhone/iPod。

我尝试过的: 我正在使用 Chrome 开发工具对此进行测试。我从 Chrome Devtools 中选择用户代理,例如:Chrome - iPhone 或 Chrome - Android Mobile。

我试过调试这个,我得到: uagent = "mozilla/5.0 (iphone; cpu iphone os 9_1 like mac os x) applewebkit/601.1.46 (khtml, like gecko) version/9.0 mobile/13b137 safari/601.1"

但它完全跳过了条件

我还查看了不同的文章,我的匹配条件看起来是正确的。事实上,我从一篇 SO 文章中得到了这个。但它在 W3Schools、mozilla 文档等上看起来是一样的。 我还尝试将代码移出服务方法并移入组件本身,但这没有帮助。我记得测试过它并且它在某个时候工作(使用 iPhone 作为用户代理)但不确定发生了什么变化。

Angular/TypeScript:

this.isMobile = this.securityService.isUserAgentMobile();

isUserAgentMobile(): boolean {
        var isMobile = false;
        var uagent = navigator.userAgent.toLowerCase();
        if (uagent.match(/iPad|iPhone|android/)) {
            console.log("user agent is mobile!");
            isMobile = true;
        }
        return isMobile;
}

【问题讨论】:

  • 你用的是什么型号的iPhone,浏览器是什么版本,可以分享一下
  • @ZainZafar 。我在网络条件下从 Chrome 的 DevTools (F12) 中选择它。它的字面意思是“Chrome - iPhone”。我会附上截图
  • 小写字符串永远不会匹配包含大写字母的单词。
  • @str 名称签出 :)。还有 facepalm ,就是这样!这么明显,不知道我怎么错过了。谢谢你。随意提出作为答案和错误选择。

标签: javascript typescript user-agent


【解决方案1】:

由于设置为小写,匹配也必须是小写:

var uagent = navigator.userAgent.toLowerCase();
if (uagent.match(/ipad|iphone|android/))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多