service-worker - 如何指向 serviceworker.js 中的当前目录
问题描述
我在暂存目录上安装了我的服务人员
主网站在:https:example.com
分期开启:https:example.com/test/
服务工作者路径:https:example.com/test/serviceworker.js
这就是我注册服务人员的方式:
navigator.serviceWorker.register('https:example.com/test/serviceworker.js', {scope: '/test/'})
.then(registration => {
console.log(`Service Worker registered! Scope: ${registration.scope}`);
})
Service Worker 工作正常,并且已安装。
我担心的是在 serviceworker.js 中我想使用/
来自动指向当前目录的路径,在这种情况下是:/staging/
例如,当我想在暂存站点中缓存主页时
/**
* Cache the homepage.
*/
workbox.routing.registerRoute('/', workbox.strategies.staleWhileRevalidate();
这里它的缓存https:example.com
不是https:example.com/test/
我知道我可以简单地更改registerRoute('/')
为registerRoute('/staging/)'
但这效率不高,并且会让我需要为 localhost、staging 和部署使用不同版本的 serviceworker。我想知道这里的正确方法是什么,所以我可以将范围'/'设置为 serviceworker.js 所在的当前目录。谢谢。
解决方案
好的,我想我想出了正确的方法。
如何指向当前目录:只需 './' 而不是 '/'
/**
* Cache the homepage.
*/
workbox.routing.registerRoute('./', workbox.strategies.staleWhileRevalidate();
如何缓存当前路径中的文件和图像: './image/' 而不是 '/image/'
const urlsToCache = [
'./image/fallback.png',
'./offline/'
];
现在,相同的文件在本地和暂存中的工作方式相同。这是一个新手错误,我需要更聪明:)
编辑:我在Google 文档(服务工作者生命周期)中找到了这个:
Service Worker 注册的默认范围是 ./ 相对于脚本 URL。这意味着如果您在 //example.com/foo/bar.js 注册一个服务工作者,它的默认范围是 //example.com/foo/。
推荐阅读
- python - 如何使用 Python 检查用户和密码是否已经在 MySQL 数据库中?
- dns - 结合多个 SPF 记录,如何决定应该使用什么限定符?
- java - 如何在 Spring Boot 中从单个控制器返回内容数据和页面名称
- spring - 如何将属性设置为与 thymeleaf 的会话?
- installation - 以非管理员身份运行 setup.exe 不会引发任何错误
- react-native - 如何在反应原生 webview 中启用浏览图像?
- php - 如何显示表格中的所有记录?
- phonegap-plugins - 如何为 webapp 构建 phonegap 应用程序?
- sql - PostgreSQL:如何将多行的值放在不同的列中,并将所有值合并到一行中?
- java - JavaFX KeyEvent - 是否可以获得未定义事件的更多信息?