点击通知打开已安装的PWA

4

当用户点击后端生成的通知时,我会打开一个新窗口,在浏览器上这很好用,因为当浏览器已经打开时它会打开一个新标签页,否则会打开一个新窗口。

但是如果我安装了PWA应用,在点击通知时,它会打开一个新的浏览器窗口而不是打开PWA应用。

这是我的notificationclick事件代码:

如果PWA应用正在运行,我会调用focus()函数,然后再导航到url,但如果PWA应用关闭,我就无法打开PWA应用并调用focus和navigate函数。

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?

有任何的解决方案吗?我也在寻找同样的解决方案。 - kodali
希望这可以帮到您:https://dev59.com/ALfna4cB1Zd3GeqPvJJW#64755838 - Michael Joseph
哈哈,我本来是想打开网页而不是PWA。 - undefined
1个回答

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);
        }
    }
}));

1
你从哪里获取数据对象和data.webUrl的值? - Abdulrahman Falyoun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接