假设我想检测JavaScript库中对通知(http://notifications.spec.whatwg.org/)的支持。
我可以使用window.Notification !== undefined
。但是,如果库(或其他库)的用户也有某种全局Notification
对象被定义用于完全不同的目的呢?
另一方面,如果其他库是polyfill怎么办?然后他们的Notification
对象是可以接受的。除了测试全局对象之外,我应该测试所有方法吗?
更新:
我注意到一个notifications polyfill中有趣的事情:
ret[toString] = function() {
return 'function Notification() { [native code] }';
};
依靠类似的东西检测它是否是原生/ polyfill对象有多可靠?
答案 0 :(得分:1)
所以基本上有两种选择。
首先是尝试依赖'function Notification() { [native code] }'
toString
值,因为它至少是由某些polyfill设置的。不幸的是,这不可靠,因为我没有找到关于它是否是polyfill作者中的常用方法以及它是否是浏览器中可靠的返回值的信息。
正如评论中所建议的那样,另一个选择是忽略潜在的冲突,只是继续测试存在。这就是我现在所说的。
答案 1 :(得分:0)
您始终可以采用jQuery方法并重新定义引用预先存在的窗口的任何内容。通知类似于:
window._Notification = window.Notification;
保罗爱尔兰人在this video中有一点做得非常好,可以解释它的运作方式。
这样,您可以继续执行他们正在使用的任何其他功能,同时还包括您的功能。
希望有所帮助。 :)