如何对Web Push做特征检测?

How to do feature detection for Web Push?

是否有任何简单的方法可以在浏览器(桌面和移动设备)中检测 Web 推送 API

目前,任何支持 Service Worker 的浏览器也都支持 Web Push。

所以只需检查 navigator 是否有 serviceWorker 属性。

如果您担心将来某些浏览器可能会在 Web Push 之前开始支持 Service Workers,那么这样的事情会起作用:

navigator.serviceWorker.getRegistration()
.then(function(registration) {
  if (registration.pushManager) {
    // Web Push supported.
  } else {
    // Web Push not supported.
  }
});

有些浏览器版本只支持 service worker,不支持 Push API。

建议您尝试检测 Push API 本身。

如果您需要以同步方式检查浏览器支持(即不等待 Promise),您可以使用这个(从 Pushpad SDK 复制):

function isPushApiSupported() {
  return 'PushManager' in window;
}