【问题标题】:Open installed PWA on notification click在通知点击时打开已安装的 PWA
【发布时间】:2020-03-14 07:09:55
【问题描述】:

当用户点击后端生成的通知时,我实际上是在打开一个新窗口,这在浏览器上运行良好,因为它在打开浏览器时打开一个新选项卡,否则打开一个新窗口。

但如果我安装了 PWA,则在收到通知时单击它会打开一个新的浏览器窗口,但不会打开 PWA。

这是我的 notificationclick 事件代码:

如果 PWA 是打开的,我会调用 focus(),然后再调用 navigate(url),但如果 PWA 关闭,我无法打开 PWA,然后调用 focus 和 navigation 函数。

event.waitUntil(clients.matchAll({
        type: "window"
    }).then(function (clientList) {
        console.log('clientList: ', clientList);
        if (data.WebUrl) {
            for (var i = 0; i < clientList.length; i++) {
                var client = clientList[i];
                console.log('client: ', JSON.stringify(client), client);
                if ('focus' in client) {
                    client.focus();
                    // try to navigate to the url in the focused client
                    client.navigate(data.WebUrl).then((response) => {
                        event.notification.close();
                    });
                    break;
                }
                else {
                    clients.openWindow(data.WebUrl);
                    event.notification.close();
                }
            }
        }
    }));

是否有办法以编程方式打开 PWA?

【问题讨论】:

标签: javascript notifications service-worker progressive-web-apps


【解决方案1】:

我终于能够通过以下方式实现我想要的:

event.waitUntil(clients.matchAll({
    type: "window",
    includeUncontrolled: true
}).then(function (clientList) {
    if (data.WebUrl) {
        let client = null;

        for (let i = 0; i < clientList.length; i++) {
            let item = clientList[i];

            if (item.url) {
                client = item;
                break;
            }
        }

        if (client && 'navigate' in client) {
            client.focus();
            event.notification.close();
            return client.navigate(data.WebUrl);
        }
        else {
            event.notification.close();
            // if client doesn't have navigate function, try to open a new browser window
            return clients.openWindow(data.WebUrl);
        }
    }
}));

【讨论】:

  • 你从哪里得到数据对象和data.webUrl
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多