• 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。

  • 相关阅读:
    自动登录远程linux服务器
    vue2知识补充
    iMedicalLIS监听程序(2)
    直接插入排序(C++实现)
    Java调用第三方库JNA(C/C++)
    求先序遍历序列中第(1<=k<=二叉树中结点个数)个结点的值
    【面试必备】我跟面试官聊了一个小时线程池!
    linux内核中内存反碎片技术
    抓取手机端变体组合思路设想
    实用新型专利的注意事项
  • 原文地址:https://blog.csdn.net/kevin_lcq/article/details/133783446