javascript - 如何导出服务 worker 中的事件接收的数据以对组件使用react

标签 javascript reactjs push-notification service-worker pushy

我正在使用 Pushy.me 服务来接收推送通知,并且我将所有设置都正确。所以现在我正在服务工作文件中接收推送,我可以在控制台中显示它,但问题是我必须在我的 react 组件中访问推送的数据,那么如何导出服务工作人员中的 fenched 数据并从中访问它我的 react 组件或任何其他js文件?

我假设我可以在服务 worker 的事件中抛出另一个事件并从任何其他组件接收它,但我无法做到这一点,因为我对事件真的很陌生!

这是 service-worker.js 文件:

// Import Pushy Service Worker 1.0.3
// Listen for incoming push notifications
self.addEventListener("push", function(event) {
  // Extract payload as JSON object, default to empty object
  var data = event.data.json() || {};
  console.log(data);

  var e = new CustomEvent("build", { data });
  // Extract notification image URL
  var image = data.image || "https://sdk.pushy.me/web/assets/img/icon.png";

  // Notification title and body
  var title = data.title || "";
  var body = data.message || "";

  // Notification options
  var options = {
    body: body,
    icon: image,
    badge: image,
    data: {
      url: data.url
    }
  };

  // Wait until notification is shown
  event.waitUntil(self.registration.showNotification(title, options));
});

// Listen for notification click event
self.addEventListener("notificationclick", function(event) {
  // Hide notification
  event.notification.close();

  // Attempt to extract notification URL
  var url = event.notification.data.url;

  // Check if it exists
  if (url) {
    // Open the target URL in a new tab/window
    event.waitUntil(clients.openWindow(url));
  }
});

最佳答案

Service Workers 和常规 JavaScript 执行上下文之间可用的通信 channel 是 postMessage。您在客户端代码(React 代码)中附加 postMessage 事件监听器,然后从 Service Worker 发送消息。

https://developer.mozilla.org/en-US/docs/Web/API/Client/postMessage

关于javascript - 如何导出服务 worker 中的事件接收的数据以对组件使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697120/

相关文章:

javascript - 在 Greasemonkey 中修改 Angular JS 中的 DOM 元素

javascript - Handlebars : More than one model inside template

reactjs - 调度操作后 react Redux setState

reactjs - 使用 mobx 继承 React 组件

android - 使用 Google App Engine 在 Android 中推送通知

iOS 推送 Token Hex 或 B64

javascript - javascript中的.match和.test有什么区别

javascript - 使用查询从 div(page) 搜索文本第二次会崩溃

javascript - parent 的 componentDidMount 是在所有 children 的 componentDidMount 之后调用的吗?

ios - 从设备删除单个已发送的远程通知