--- title: PushManager.subscribe() slug: Web/API/PushManager/subscribe translation_of: Web/API/PushManager/subscribe ---

{{SeeCompatTable}}{{ApiRef("Push API")}}

{{domxref("PushManager")}}  的 subscribe() 接口订阅了一个推送服务。

返回一个 {{jsxref("Promise")}} 形式的  {{domxref("PushSubscription")}} 对象,该对象包含了推送订阅详情。如果当前 service worker 没有已存在的订阅,则会创建一个新的推送订阅。

语法

​PushManager.subscribe(options).then(function(pushSubscription) { ... } );

参数

options {{optional_inline}}
一个包含可选配置参数的对象。包含以下属性:

返回值

返回 {{domxref("PushSubscription")}} 对象的 {{jsxref("Promise")}}。

示例

this.onpush = function(event) {
  console.log(event.data);
  // 这里可以向 IndexDB 写入数据,向任何打开的窗口发送数据以及显示通知等
}

navigator.serviceWorker.register('serviceworker.js').then(
  function(serviceWorkerRegistration) {
    var options = {
      userVisibleOnly: true,
      applicationServerKey: applicationServerKey
    };
    serviceWorkerRegistration.pushManager.subscribe(options).then(
      function(pushSubscription) {
        console.log(pushSubscription.endpoint);
        // 应用服务器所需的推送订阅详情现在可用,并且可以通过如 XMLHttpRequest 的方式发送
      }, function(error) {
        // 开发过程中将错误打印到控制台通常很有帮助。同样,生产环境下将错误信息发送至应用服务器后台也一样。
        console.log(error);
      }
    );
  });

规范

Specification Status Comment
{{SpecName('Push API', '#widl-PushManager-subscribe-Promise-PushSubscription--PushSubscriptionOptions-options', 'subscribe()')}} {{Spec2('Push API')}} Initial definition.

浏览器兼容性

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support {{CompatChrome(42.0)}} {{CompatGeckoDesktop(44.0)}}[1] {{CompatNo}} {{CompatUnknown}} {{CompatNo}}
Feature Android Android Webview Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile(48)}}[2] {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatChrome(42.0)}}

另见