【问题标题】:How can I test pushsubscriptionchange event-handling code?如何测试 pushsubscriptionchange 事件处理代码?
【发布时间】:2016-08-04 18:28:21
【问题描述】:

当推送通知服务器希望客户端重新订阅时,浏览器会触发pushsubscriptionchange 事件。如何手动触发此事件进行测试?

【问题讨论】:

    标签: web-push progressive-web-apps


    【解决方案1】:

    当用户删除并重新授予推送权限时也会触发该事件(请参阅https://github.com/w3c/push-api/issues/116)。

    例如,在 Firefox 中,您可以单击站点标识图标,在“权限”部分中,为“接收通知”选择“阻止”,然后选择“允许”。

    将触发pushsubscriptionchange 事件。

    【讨论】:

    • 试过了,事件没有触发......我也看到github.com/w3c/push-api/issues/116 open
    • 它曾经可以工作,正如您从我的屏幕截图中看到的那样。我不知道从那以后它是否停止工作。您也可以尝试从“首选项”->“内容”中允许发送通知的网站列表中删除该网站。
    • Last comment 在这个问题中说 现在定义用户代理可以在权限被撤销时触发 pushsubscriptionchange 事件
    • 我设法通过清除权限触发了 firefox 57 中的事件,然后调用 registration.pushManager.subscribe(),然后再次允许该权限。
    • 我能够按照 Marco 的建议触发它,但在当前的 Firefox (v66) 中并不容易,因为现在您必须转到设置,找到网站并在那里禁用/启用表单。
    【解决方案2】:

    很遗憾,无法对此功能进行任何端到端测试。你能做的最好的就是通过服务工作者的 JS 触发事件:

    function triggerSubscriptionChange() {
      registration.pushManager.getSubscription().then(subscription => {
        if (subscription) {
          console.log("subscribed, subscription", subscription);
          return subscription.unsubscribe();
        }
      }).then(() => {
        console.log("unsubscribed");
        return registration.pushManager.subscribe({
          userVisibleOnly: true
        });
      }).then(subscription => {
        console.log("subscribed, subscription", subscription);
        self.dispatchEvent(new ExtendableEvent("pushsubscriptionchange"));
      });
    }
    

    【讨论】:

    • 您实际上并未使用您的方法测试订阅刷新,因为您的事件缺少event.oldSubscriptionevent.newSubscription。在浏览器开发工具中有一个按钮来触发真正的pushsubscriptionchange 会很有用:请参阅此feature proposal in the Chromium bug tracker
    • 另外,使用你的方法我得到这个错误:Failed to execute 'waitUntil' on 'ExtendableEvent': Can not call waitUntil on a script constructed ExtendableEvent.
    猜你喜欢
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2010-09-09
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多