如何使用JavaScript检测Firefox移动版?

12

我使用以下代码来检测在我的移动站点上使用的浏览器是否符合特定的标准:

var isiPhone = navigator.userAgent.match(/iPhone/i) != null;
if (isiPhone){ alert ('iphone');

但是如果我尝试在Firefox / Mozilla中执行此操作,我无法使其起作用。我已经尝试过:

var isFirefox = navigator.userAgent.match(/Mozilla/i != null);

var isFirefox = navigator.userAgent.match(/Firefox/i != null);

我访问了whatismyuseragent.com并获得了以下信息:

Mozilla/5.0 (Android;Linux armv7l; rv6.0) Gecko/20110811 Gecko Firefox/6.0 Fennec/6.0

有什么办法可以正确地检测出这个问题?我需要编写一些针对Firefox的特定代码。


1
根据您想要做什么,您可能会考虑使用特性检测代替(http://ejohn.org/blog/future-proofing-javascript-libraries/)。另外,请参阅SO上的另一个问题:https://dev59.com/73M_5IYBdhLWcg3wn0vT - mbillard
7个回答

21

你可以使用 navigator.userAgent 来检测浏览器,navigator.platform 来检测当前平台。

检测 Firefox:

var is_firefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;

检测安卓系统:

var is_android = navigator.platform.toLowerCase().indexOf("android") > -1;

同时检测两者:

if(is_firefox && is_android)
    //Do Work

我建议使用像modernizr这样的工具,以避免浏览器检测,专注于功能检测。


OP正在询问如何检测移动版本。这在移动和非移动之间有什么不同? - JaredPar
应该修复 - 还要在其中添加平台检测。 - Rion Williams
嗅探“firefox”几乎肯定是错误的做法。您可能想要查找“gecko /”而不是“firefox”。不幸的是,寻找“gecko”并不起作用,因为基于WebKit的浏览器经常在UA字符串中包含该字符串... - Boris Zbarsky
很遗憾,Firefox移动版不支持触摸事件,否则你只需做简单的 ("ontouchstart" in window) 就行了。现在你需要进行浏览器嗅探,我们又回到了九十年代 :( - Husky
1
Firefox现在返回“Linux armv7l”作为平台,而不是Android,因此这将无法工作。但是,您可以在userAgent中检查“android”和“firefox”,其中包括两者,例如:“Mozilla/5.0(Android 7.0; Mobile; rv:50.0)Gecko/50.0 Firefox/50.0” - MarkLunney

5
var isFirefox = /Android.+Firefox\//.test(navigator.userAgent);

2
移动版的Firefox被称为Fennec,因此只需搜索它即可:
var is_Firefox = navigator.userAgent.toLowerCase().indexOf('fennec') > -1;

无法正常工作... 这是浏览器的输出: “Mozilla/5.0(Android 8.0.0;Mobile;rv:64.0)Gecko/64.0 Firefox/64.0” - Mohammad Javidi

1

以上的任何功能都对我无效,特别是buriwoy函数只能检测到安卓或火狐浏览器,他的这个版本的函数可以正常工作:

function detectAndroidFirefox () {
   var agent = navigator.userAgent.toLowerCase();
   if(agent.indexOf('firefox') >= 0){
     if(agent.indexOf("android") >= 0){
       return true;    
     } else{
       return false;
     }
   } else{
     return false;
   }
}

0

如果想要检查用户代理是否包含Firefox或Android,可能需要使用一些正则表达式的代码。


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0
这个简单明了地检测出Android上的Firefox:
isFxAndroid = /^Linux a/.test(navigator.oscpu);

或者用更现代的方式,使用startsWith来实现同样的功能:
isFxAndroid = navigator.oscpu.startsWith("Linux a");

如何运作:
if (navigator.oscpu) { /* 我是Firefox */ } 是一种常用的检测Mozilla浏览器(Firefox)的方法,其他浏览器返回 undefined
根据HTML规范,Gecko浏览器(Firefox)必须返回一个字符串给 navigator.oscpu
如果导航器兼容模式是Gecko,则用户代理还必须支持以下部分接口
https://html.spec.whatwg.org/multipage/system-state.html#concept-navigator-compatibility-mode

Android上的Firefox返回的navigator.oscpu类似于 Linux armv71Linux aarch64。Linux桌面上的Firefox始终返回 Linux x86_64;这个字符串已经冻结多年(与实际CPU无关)。因此,使用提议的查询无法获得桌面版Firefox。

你可以在这里测试你的浏览器返回值 navigator.oscpu
http://jeka.info/test/navigator.html

-1

Rion的答案不起作用了(至少现在是这样),因为navigator.platform不返回Android,而是返回Linux。

我写了一个函数,似乎可以工作:

function detectAndroidFirefox () {
   var agent = navigator.userAgent.toLowerCase();
   return (agent.indexOf('firefox') + agent.indexOf("android")) >= 0;
}

或许有人会需要这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接