假设我想在
JavaScript库中检测到通知(
http://notifications.spec.whatwg.org/)的支持.
我可以使用window.Notification!== undefined.但是如果库(或另一个库)的用户也具有为完全不同的目的定义的某种全局通知对象呢?
另一方面,如果另一个图书馆是一个polyfill?然后他们的Notification对象是可以接受的.我应该测试除了测试全局对象之外的所有方法吗?
更新:
我在notifications polyfill年注意到了一件有趣的事情:
ret[toString] = function() { return 'function Notification() { [native code] }'; };
依靠这样的东西来检测它是否是本机/ polyfill对象的可靠性?
解决方法
所以基本上有两个选择.
首先是尝试依靠’function Notification(){[native code]}’toString的值,因为它至少被一些polyfill设置.不幸的是,这不可靠,因为我发现没有关于它是否是polyfill作者中的常见方法的信息,以及它是否是浏览器中可靠的返回值.
另一种选择,正如意见中所提出的那样,是忽略潜在的冲突,只是为了存在而进行测试.这就是我现在所去的.