• service workers跟页面dom交互


    Service Workers 本身不能直接访问 DOM,因为它们在与主线程不同的线程中运行。然而,你可以使用 postMessage API 在 Service Workers 和页面之间进行通信。

    以下是一个简单的示例,展示了如何使用 Service Workers 与页面 DOM 进行交互。

    在 Service Worker 中

    假设你有一个 Service Worker 文件(service-worker.js),你可以监听 message 事件,并根据消息内容做出响应。

    1. // service-worker.js
    2. self.addEventListener('message', function(event) {
    3. if (event.data.action === 'sayHello') {
    4. self.clients.matchAll().then(function(clients) {
    5. clients.forEach(function(client) {
    6. client.postMessage({
    7. message: 'Hello from Service Worker!'
    8. });
    9. });
    10. });
    11. }
    12. });

     

    在主页面中

    在主页面中,你需要首先注册 Service Worker,然后设置一个监听器来接收来自 Service Worker 的消息。

    1. // 注册 Service Worker
    2. if ('serviceWorker' in navigator) {
    3. navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
    4. console.log('Service Worker 注册成功');
    5. }).catch(function(error) {
    6. console.log('Service Worker 注册失败:', error);
    7. });
    8. }
    9. // 监听来自 Service Worker 的消息
    10. navigator.serviceWorker.addEventListener('message', function(event) {
    11. console.log('收到 Service Worker 的消息:', event.data.message);
    12. // 更新 DOM
    13. document.getElementById('messageFromSW').textContent = event.data.message;
    14. });

    触发交互

    你可以在页面上添加一个按钮,当点击该按钮时,向 Service Worker 发送一个消息。

    1. <div id="messageFromSW">div>
    2. <script>
    3. document.getElementById('sayHelloBtn').addEventListener('click', function() {
    4. // 向 Service Worker 发送消息
    5. navigator.serviceWorker.controller.postMessage({
    6. action: 'sayHello'
    7. });
    8. });
    9. script>

     

    这样,当你点击 "Say Hello" 按钮时,页面会向 Service Worker 发送一个消息。Service Worker 收到消息后,会向页面发送一个回应,页面再根据这个回应更新 DOM。

  • 相关阅读:
    Kotlin读书笔记之函数式kotlin
    【软考】数据结构之队列和栈
    LeetCode 45. 跳跃游戏 II
    私信功能的设计与实现
    UE5 官方案例LyraStarter 全特性详解 5.LyraPlayerStart
    OpenCV图像处理学习十一,图像开操作与闭操作
    14.信号量的代码实现
    传道授业20年,这是一个老网工的初心
    Python----lambda函数(显示定义全局变量)、函数参数的传递类型及规则、函数的返回值规则及用法、datetime库(与日期和时间有关)
    Redis基础架构
  • 原文地址:https://blog.csdn.net/kevin_lcq/article/details/133783446