reactjs - 是否可以在自定义服务工作者和 React 组件之间传递数据?
问题描述
我有一个 create-react-app 并在公共文件夹中创建了一个自定义服务人员。在 src 我有默认的 serviceWorker.js 文件。在自定义服务工作者文件的公用文件夹中,我添加了一个推送事件侦听器,如下所示:
self.addEventListener("push", function (event) {
const someData= event.data.text();
const title = "Test";
const options = {
body: someData,
icon: "./someIcon.png",
badge: "./someIcon.png",
};
event.waitUntil(self.registration.showNotification(title, options));
});
问题是,在我显示此通知之前,我需要对从事件接收到的数据应用一些转换,为此我需要在一些反应组件中使用这些数据,在那里进行转换,然后执行以下操作:event.waitUntil(self.registration.showNotification(title, options));
将转换应用于我的数据,以便用户最终获得该数据作为通知。有可能实现这样的目标吗?
解决方案
实现这一点实际上是不可能的,因为您无法知道在push
调用事件处理程序时是否会为您的源打开一个网页。您的服务工作者可能会在任何时间点从您的推送通知服务器接收到事件被唤醒push
,并且不能保证您的 Web 应用程序也将打开。
正因为如此,我会尽量不去实现一些用于postMessage()
在服务工作者和客户端页面(如果它是打开的)之间有条件地对话的东西,因为那是只在某些时候工作的代码。
相反,您应该实现所需的所有代码,以便在 service worker 本身内部显示通知。
推荐阅读
- web - 拒绝在框架中显示“此处显示的域名”,因为它将“X-Frame-Options”设置为“sameorigin”
- vba - VBA按升序复制粘贴日期
- python - 将包含 1600 之前的日期的字符串转换为 Pandas 中的 datetime 对象
- python - 如何调试 weasyprint 中的 PDF 损坏的原因?
- node.js - 没有重载匹配这个调用 - moment js
- javascript - 使用 Zenloop 的 API 和 Apps 脚本将数据从 Zenloop 拉入 Google 表格
- python - 从旋转的 ROI 中获取数据
- raytracing - 具有材质支持的光线追踪库
- javascript - 如何根据键值获取对象,然后获取兄弟键名称和值
- r - 从 R 中的常规数据框编写 Genepop 友好的 .txt 文件