首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Javascript中检测Safari 10浏览器?

如何在Javascript中检测Safari 10浏览器?
EN

Stack Overflow用户
提问于 2016-08-24 18:28:33
回答 2查看 8.8K关注 0票数 4

我用的是

代码语言:javascript
复制
var isSafari = /constructor/i.test(window.HTMLElement)

但它不适用于新的Safari10。

对使用什么有什么建议吗?

谢谢!

编辑:How to detect Safari, Chrome, IE, Firefox and Opera browser?仅涵盖Safari9版之前的版本

EN

回答 2

Stack Overflow用户

发布于 2016-09-22 00:21:51

我用以下代码扩展了How to detect Safari, Chrome, IE, Firefox and Opera browser?中提到的safari检测行,并将其放在测试列表的底部:

代码语言:javascript
复制
isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 || !isChrome && !isOpera && window.webkitAudioContext !== undefined;

它主要是检查web音频API是否使用了webkit前缀,然后确定它不是Chrome或Opera。(旧版本的Chrome和Opera也使用了这个前缀)

我去了caniuse.com,看看哪些浏览器支持哪些功能,并尝试寻找一种在特定于Safari.There的方式下脱颖而出的功能,可能还有其他我可以使用的功能。(可能还有更好的)。

我知道特征检测通常是更好的方法,除了特征检测不会检测特征是否损坏或根据浏览器的不同而产生不同的结果。

票数 6
EN

Stack Overflow用户

发布于 2016-11-02 21:12:57

代码语言:javascript
复制
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

将涵盖从3.0到10 (不是11)的所有Safari版本。

它检查仅在Safari上流行的两个API转移。在9.1.3之前的版本中,HTMLElement对象的.toString()结果为[object HTMLElementConstructor],并且是Safari所独有的。在9.1.3之后的版本中已修复此问题。

对于较新的版本,请检查[object SafariRemoteNotification]对象,它是仅存在于现代Safari浏览器中的对象类型。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39120772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档