有没有办法在过滤掉 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?的主要内容,如果未能解决你的问题,请参考以下文章