有没有办法在过滤掉 iOS Chrome、Firefox 和其他浏览器的同时检测 iOS Safari?

Posted

技术标签:

【中文标题】有没有办法在过滤掉 iOS Chrome、Firefox 和其他浏览器的同时检测 iOS Safari?【英文标题】:Is there a way to detect iOS safari while filtering out iOS Chrome, Firefox and other browsers? 【发布时间】:2015-03-24 21:07:54 【问题描述】:

所以那些在 ios 网络应用程序上工作的人可能知道,由于 Apple 的政策,iOS 上的 Chrome 和其他移动浏览器使用非常古老的 javascript 引擎。这就是为什么我们需要为 Chrome 和其他 iOS 非 Safari 浏览器禁用一些渲染。

我一直在阅读this question,但那里没有有用的答案。以下是我的一些方法(失败):

使用is_iOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/g) 检测浏览器是否在iOS 上。然后使用:

is_FF = navigator.userAgent.match(/(firefox)/g)is_Chrome = navigator.userAgent.match(/(chrome)/g)

杀死那些 firefox 和 chrome 浏览器。

然后我意识到所有浏览器都与 iOS safari 共享相同的用户代理字符串。所以我想该方法应该是运行一个只有Safari才能运行的javascript函数,然后确定浏览器是否是Safari。

【问题讨论】:

我可以建议基于特征而不是userAgent 进行过滤吗?例如:if (window.localStorage) ...... @blex 我意识到所有浏览器都与 iOS safari 共享相同的用户代理字符串。所以我想该方法应该是运行一个只有Safari才能运行的javascript函数,然后确定浏览器是否是Safari。 @KJPrice 请解释更多。这似乎是正确的解决方案。谢谢。 【参考方案1】:

因此,在选择在浏览器中工作时应该使用哪些本机功能时,有两种思路。一种思想流派是检查userAgent,就像您在这里所做的那样,并使用/删除基于userAgent 的功能。

检查userAgent 的问题在于它变得非常复杂。您已经遇到了一个有趣的问题,但是当您发现 ie8 没有您要找的功能时会发生什么?

更好的解决方案可能是检查该功能是否存在于其当前上下文中,而不用担心userAgent。一个很好的例子是新的 html5 audio 元素。根据browser support,我们可以看出它在ie8 和Safari feature 是否存在。我们知道audio 元素是Audio 类的一个实例。我们可以简单地检查一下:

if (window.Audio) 
    //load and play the HTML5 audio element here

这比检查userAgent 简单得多。

【讨论】:

这绝对是个好主意!我尝试使用 window.localStorage 作为检测器,不幸的是 Safari 和 Chrome 都返回了 true 那么localStorage 适用于这些浏览器。你说你在这里说“我们需要禁用 Chrome 的一些渲染”,你需要禁用什么? 就我而言,我专门创建了一个javascript渲染引擎,可以直接在页面上运行视频作为背景(而不是调用视频播放器),但非Safari的帧速率非常低浏览器。

以上是关于有没有办法在过滤掉 iOS Chrome、Firefox 和其他浏览器的同时检测 iOS Safari?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 c# 过滤掉 syn 请求数据包?

Django:有没有办法从 mail_admins 日志处理程序中过滤掉 503“服务不可用”响应?

为啥 spark csv 会过滤掉空行?

那些所谓过滤掉iOS菜鸟的面试题

Python:有没有办法过滤 c++ 文件?

Spring 可缓存 - 使用 SpEL 过滤掉空集合