推送Web API、通知点击,如何打开桌面客户端而不是打开新的浏览器客户端

3
谈到服务工作者,当推送通知到达时,我们可以处理用户在这些通知中的点击。例如,在浏览器中打开URL以在新标签页中打开。但是,如果我们有一个桌面Web应用程序(添加到HomeScreen),我们该如何打开它呢?
self.addEventListener('notificationclick', function(event) {
    console.log('Notification click: tag ', event.notification.tag);
    event.notification.close();
    var url = 'https://youtu.be/gYMkEMCHtJ4';
    event.waitUntil(
        clients.matchAll({
            type: 'window'
        })
        .then(function(windowClients) {
            for (var i = 0; i < windowClients.length; i++) {
                var client = windowClients[i];
                if (client.url === url && 'focus' in client) {
                    return client.focus();
                }
            }
            if (clients.openWindow) {
                return clients.openWindow(url);
            }
        })
    );
});

在这段代码中,clients.openWindow(url); 总是会在浏览器中打开应用。

“桌面Web应用程序”是什么意思?(另外,供参考:在移动设备上,如果网站已经添加到主屏幕一次,则点击通知将全屏打开,https://bugs.chromium.org/p/chromium/issues/detail?id=541711) - mjs
你解决了这个问题吗?我也在尝试处理它。 - 32teeths
1个回答

0

目前还没有使用URL方案(即使用clients.openWindow())启动打包应用程序的方法...。但是,有一个活跃的提案允许使用自定义URL方案chrome-app://APP_ID来启动应用程序。

解决此问题的方法(基于@kzahel的提议)是使用已注册上下文菜单的扩展程序,然后以某种方式告诉扩展程序打开应用程序。


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