问题描述
我在我的代码中放置了一些推送通知,以便在执行操作时通知某人。我在 C# 中使用 lib.net.webpush 3.1.0 和 .net 4.5.2 制作了后端。 到目前为止,通知系统运行良好,但有些事情我无法成功: 在我的 service worker 文件 (sw.js) 中,使用 Angular 9,我希望当有人收到通知时,当用户点击它时,他被重定向到发送它的页面。
首先我喜欢它(正如我在文档中读到的那样):
self.addEventListener('notificationclick',function (event) {
const urlToOpen = new URL(event.notification.data,self.location.origin).href;
event.notification.close();
event.waitUntil(clients.openWindow(urlToOpen));
});
但我总是被重定向到“localhost://4200”而不是完整的 URL。
为了测试,我做了这个:
self.addEventListener('notificationclick',function (event) {
const urlToOpen = new URL(self.location.origin + "/#/rdc/rapports/2015");
event.notification.close();
event.waitUntil(clients.openWindow(urlToOpen));
});
它奏效了。但我无法获取动态 URL。 有谁知道如何在此文件中获取动态 URL?或者如何重定向到发送通知的页面? 我也在这里尝试过这样的事情:notificationclick event service worker 但我真的不明白。 谢谢。
解决方法
我只是成功地做到了。 因此,对于与我处于同一情况的任何人:在 Service Worker 中,您无法访问 DOM,我无法获得任何 ID 或我试图在代码中瞄准的任何路径。 解决方案是,在我的 C# 代码中,将“URL”属性和参数添加到我的“SendNotification”函数中。然后,当我得到一个用户时,我可以定位他的 ID,因为它已经在这里了。 然后,在我的 Angular 代码中(在 service worker 文件中),我只需要这样做(我将我的 url 存储在此处的“数据”中):
self.addEventListener('notificationclick',function (event) { console.log("notif click event",event);
const urlToOpen = new URL(self.location.origin + event.notification.data);
event.notification.close();
event.waitUntil(clients.openWindow(urlToOpen)); });
然后,当我点击通知时,我被重定向到所需的 URL。