检测浏览器功能支持的最可靠方法是什么?

时间:2013-06-15 00:33:42

标签: javascript

假设我想检测JavaScript库中对通知(http://notifications.spec.whatwg.org/)的支持。

我可以使用window.Notification !== undefined。但是,如果库(或其他库)的用户也有某种全局Notification对象被定义用于完全不同的目的呢?

另一方面,如果其他库是polyfill怎么办?然后他们的Notification对象是可以接受的。除了测试全局对象之外,我应该测试所有方法吗?

更新:
我注意到一个notifications polyfill中有趣的事情:

ret[toString] = function() {
    return 'function Notification() { [native code] }';
};

依靠类似的东西检测它是否是原生/ polyfill对象有多可靠?

2 个答案:

答案 0 :(得分:1)

所以基本上有两种选择。

首先是尝试依赖'function Notification() { [native code] }' toString值,因为它至少是由某些polyfill设置的。不幸的是,这不可靠,因为我没有找到关于它是否是polyfill作者中的常用方法以及它是否是浏览器中可靠的返回值的信息。

正如评论中所建议的那样,另一个选择是忽略潜在的冲突,只是继续测试存在。这就是我现在所说的。

答案 1 :(得分:0)

您始终可以采用jQuery方法并重新定义引用预先存在的窗口的任何内容。通知类似于:

window._Notification = window.Notification;

保罗爱尔兰人在this video中有一点做得非常好,可以解释它的运作方式。

这样,您可以继续执行他们正在使用的任何其他功能,同时还包括您的功能。

希望有所帮助。 :)