当前位置: 首页 > 知识库问答 >
问题:

我们是否可以通过服务人员将页面新呈现在两者之间

淳于慎之
2023-03-14

在我的web应用程序中,我创建了一个脱机html页面,并编写了一个服务人员,就像如果网络关闭,它应该返回所有请求的脱机页面一样。若在脱机状态下触发任何请求,服务工作者将返回脱机html页面作为响应。但是脱机html不会显示在页面中。如果我刷新页面脱机html页面。这是因为,在刷新页面时获取原始html页面时,sw标识notwork不在那里,因此返回脱机页面。

self.addEventListener('fetch', (event) => {
    event.respondWith((async () => {
        try {
            const networkResponse = await fetch(event.request);
            return networkResponse;
        } catch (error) {
            console.log('Fetch failed; returning offline page instead.', error);

            const cache = await caches.open(CACHE_NAME);
            const cachedResponse = await cache.match(OFFLINE_URL);
            return cachedResponse;
        }
    })());
})

有没有办法在不刷新页面的情况下显示离线页面。这是我想删除旧的html页面,并显示离线页面,一旦我去离线和触发任何请求

共有1个答案

韦绍晖
2023-03-14

我不认为ServiceWorker可以这样做,因为它在一个单独的线程中一起运行,甚至不像主线程那样有权访问窗口/文档对象。您可以做的是,检测应用程序中的用户是否在线/离线,然后可以呈现离线HTML。所有主要浏览器现在都支持导航器。联机boolean,或者您甚至可以附加事件侦听器来检测更改,并编写逻辑来显示脱机HTML。

window.addEventListener('online', () => {...})
window.addEventListener('offline', () => {...})

有关浏览器支持的详细信息:https://caniuse.com/online-status

 类似资料:
  • 问题内容: 我正在学习ReactJs,真的很喜欢。我想问一下我们是否可以按类名呈现虚拟DOM以进行文档记录。 我试图通过 getElementByClassName(’class’) 作为react的render方法的第二个参数,它不起作用。React是否仅将DOM呈现给ID唯一的节点,还是有一种使用类的节点的解决方法? 问题答案: 看来您使用了错误的方法。 可能您应该使用而不是。并且不要忘记返回

  • 我使用这个众所周知的模式来显示服务工作者更新准备好安装时的通知(此代码进入网页,当然不是服务工作者代码): 当然,该代码是有效的,因为如果准备好安装新版本的服务辅助角色,它会在网页上显示通知。 问题是,如果在该点重新加载页面,则不再显示通知,因为如果安装了新的服务工作人员并等待激活,则不再触发事件。 因此,通知只出现一次,当安装了新的服务工作人员并等待激活并开始控制页面时,但是一旦页面重新加载,通

  • 我计划开发一个基于web的聊天应用程序,它接收ReSTful请求,将它们转换为XMPP,并将它们发送到XMPP服务器。 在这种基于聊天的应用程序中使用WebSocket看起来很有希望,因为事件(或响应)可以异步传递。但是,如果我使用WebSocket作为从浏览器传输请求的底层协议,这仍然可以被视为ReSTful设计吗?如果是的话,URI、动词(GET、POST…)是怎样的,websocket消息中

  • 在教程的帮助下,我编写了一个服务人员: 它总是先从缓存服务,然后获取所有文件,并在页面重新加载时更新。 Service Worker在我的服务器上的每个超文本标记语言文件中都是这样注册的: 现在的问题是,当我转到一个尚未缓存的页面时,它首先向我显示默认的Chrome错误(以及“不匹配”promise拒绝)。 软件会在向客户机显示错误页面的同时获取它,并在重新加载时再次工作(因为它是从缓存提供服务的

  • 问题内容: 我发现我在Web框架和Web服务器之间感到困惑。 我们可以说node.js是Web服务器吗???我对Web服务器/框架感到很困惑。 如果以某种方式,node.js是一种Web服务器,而不是webframework(Express),那么为什么在有用的实践中我们为什么需要将整个node.js放在Nginx服务器之上? 谁可以帮助??? 套件 问题答案: 网络服务器 Web服务器可以指帮助

  • 我们已经设置了我们的模板,包括签名块,我们能够发送收件人的姓名和电子邮件地址与信封。这些收件人出现在收件人列表中,当您登录到DocuSign时,您可以从列表中选择一个收件人并对其进行适当的定位。 我们正在考虑删除这个手动步骤,这样我们就可以说,例如,我们在信封中发送的第一个签名对应于模板中的签名块1,第二个对应于第二个,以此类推。