Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome “pushManager.subscribe”和“pushManager.getSubscription”服务工作者&x27;s_Google Chrome_Service Worker_Progressive Web Apps_Push Api - Fatal编程技术网

Google chrome “pushManager.subscribe”和“pushManager.getSubscription”服务工作者&x27;s

Google chrome “pushManager.subscribe”和“pushManager.getSubscription”服务工作者&x27;s,google-chrome,service-worker,progressive-web-apps,push-api,Google Chrome,Service Worker,Progressive Web Apps,Push Api,PushManager.getSubscription() 检索现有的推送订阅。它返回解析为包含现有订阅详细信息的PushSubscription对象的承诺。如果不存在现有订阅,则解析为空值 [……] PushManager.subscribe() 订阅推送服务。它返回解析为包含推送订阅详细信息的推送订阅对象的承诺。如果当前服务工作者没有现有订阅,则会创建新的推送订阅 根据MDN的pushManager文档。除了在getSubcription()的情况下可能会使用空值解析外,其他方法几乎相同 我

PushManager.getSubscription()

检索现有的推送订阅。它返回解析为包含现有订阅详细信息的PushSubscription对象的承诺。如果不存在现有订阅,则解析为空值

[……]

PushManager.subscribe()

订阅推送服务。它返回解析为包含推送订阅详细信息的推送订阅对象的承诺。如果当前服务工作者没有现有订阅,则会创建新的推送订阅

根据MDN的
pushManager
文档。除了在
getSubcription()
的情况下可能会使用空值解析外,其他方法几乎相同

我基本上理解,我可以简单地使用
subscribe()
,如果订阅可用,服务人员将尝试获取订阅,如果订阅不可用,还将创建新的订阅

=>但我想做些别的事。我想先尝试获取订阅,如果使用
null解决,我将尝试订阅它

    navigator.serviceWorker.register('./worker.js')
    .then(function(reg) {

        // Subscribe push manager
        reg.pushManager.getSubscription()
        .then(function(subscription) {

            if(subscription){
                // TODO... get the enpoint here
            } else {
                reg.pushManager.subscribe()
                .then(function(sub){
                    // TODO... get the endpoint here
                });
            }

        }, function(error) {
            console.error(error);
        })
    });
但我最终还是犯了一个错误:

未捕获(承诺中)DomeException:订阅失败-无活动服务工作进程


这是令人困惑的,我怀疑这是Chrome对服务人员推送API的限制,或者可能是一个bug。有人知道这种奇怪行为的相关信息吗?

问题是您的服务人员已注册,但尚未激活

您可以在注册服务人员后立即使用而不是订阅

如果要尽快激活服务人员,可以使用和,如中所述