2015-03-24 73 views
1

因此,对于那些在iOS网络应用程序工作的人可能知道,由于苹果的政策,Chrome和iOS上的其他移动浏览器使用了非常古老的JavaScript引擎。这就是为什么我们需要停用Chrome的某些渲染功能以及其他适用于iOS的非Safari浏览器。有没有办法在过滤掉iOS浏览器,Firefox和其他浏览器的同时检测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。

+0

可能我建议基于功能而不是'userAgent'进行过滤?例如:'if(window.localStorage).....'。 – 2015-03-24 21:11:17

+1

@blex我意识到所有浏览器与iOS Safari共享相同的用户代理字符串。所以我想这个方法应该运行一个只有Safari才能运行的javascript函数,然后确定浏览器是否是Safari。 – 2015-03-24 21:12:36

+1

@KJPrice请详细解释。这似乎是正确的解决方案。谢谢。 – 2015-03-24 21:13:07

回答

0

因此,选择在浏览器中工作时应使用哪种本机功能有两种思路。其中一种思路是检查userAgent,因为您正在此处执行操作,并使用/删除基于userAgent的功能。

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

更好的解决方案可能是检查功能是否存在于当前上下文中,而不必担心userAgent。一个很好的例子是新的HTML5 audio元素。基于browser support,我们可以看出它不存在于ie8中,也不存在于Safari中。而不是检查浏览器是否与此处提及的浏览器相匹配,您可以检查是否存在功能。我们知道audio元素是Audio类的一个实例。我们可以简单地检查:

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

这比检查userAgent简单得多。

+0

这绝对是一个好主意!我尝试使用'window.localStorage'作为检测器,不幸的是Safari和Chrome都返回了'true'。 – 2015-03-24 21:51:02

+0

那么'localStorage'适用于这些浏览器。你说的你在这里说的“我们需要禁用一些Chrome的渲染”,你需要禁用什么? – 2015-03-24 21:54:25

+0

在我的例子中,我创建了一个JavaScript渲染引擎,可以在页面上直接运行视频作为背景(而不是调用视频播放器),但非Safari浏览器的帧率非常低。 – 2015-03-24 21:58:37

相关问题