如何在SFCC(Demandware)中实现serviceworker
我想知道这里是否有人有在SFCC/Demandware实施服务人员的经验 我生成了一个带有Web包的服务人员 问题是:服务工作者应该可以从域的根目录访问。所以如何在SFCC(Demandware)中实现serviceworker,service,salesforce,progressive-web-apps,worker,demandware,Service,Salesforce,Progressive Web Apps,Worker,Demandware,我想知道这里是否有人有在SFCC/Demandware实施服务人员的经验 我生成了一个带有Web包的服务人员 问题是:服务工作者应该可以从域的根目录访问。所以site.com/sw.js。 JS文件通常位于static/文件夹中。 有人知道如何从Demandware/SFCC中的项目根目录为这个JS文件提供服务吗?我目前也在和DW上的服务人员打交道。 在我的例子中,我直接将脚本添加到footer.isml文件中,如下所示: <script> //init service work
site.com/sw.js
。
JS文件通常位于static/
文件夹中。
有人知道如何从Demandware/SFCC中的项目根目录为这个JS文件提供服务吗?我目前也在和DW上的服务人员打交道。 在我的例子中,我直接将脚本添加到
footer.isml
文件中,如下所示:
<script>
//init service worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker
.register("${URLUtils.staticURL('/lib/sw/sw.js')}")
.then(registration => {
console.log(
`Service Worker registered! Scope: ${registration.scope}`
);
})
.catch(err => {
console.log(`Service Worker registration failed: ${err}`);
});
});
}
</script>
不幸的是,即使我在Safari上试过,我也无法在该service worker文件中生成任何代码行,因为它在“开发”菜单中有一个service Workers选项,但它没有显示任何正在运行的service worker
我希望它能帮助您。不幸的是,在比服务工作者文件本身更高路径的作用域下注册服务工作者不起作用(如MDN中所述):
- 服务工作者将仅捕获来自服务工作者作用域下的客户端的请求
- 服务工作人员的最大作用域是工作人员的位置
- 创建新控制器(或管道),例如“ServiceWorker GetFile”;响应应为文件内容,可以从任何来源读取:
- 内容资产(dw.Content.ContentMgr.getContent())李>
- 库文件(dw.content.ContentMgr.getContent()或直接使用dw.io.file/dw.io.FileReader读取文件)李>
- 甚至网站偏好(尽管我不推荐)李>
- 在Business Manager/Merchant Tools/SEO/Alias中创建一个条目,将“/sw.js”路由到“ServiceWorker GetFile”,即使用以下内容:
由于建议的方法使用控制器,因此您可以在向用户提供内容之前动态处理内容(例如,如果需要从DMW链接中添加/删除“/v12435145145/”部分)。天空是你的极限。:) 请注意,如果您的服务人员位于“/lib/sw/sw.js”中,则不能有作用域“/”。
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=/tmp/foo --ignore-certificate-errors --unsafely-treat-insecure-origin-as-secure=[YOUR DOMAIN]
{
...
"your-host" : [
...,
{
"if-site-path": "/sw.js",
"pipeline": "ServiceWorker-GetFile"
}
]
}
...
{
"if-site-path": "/sw.js",
"pipeline": "Content-GetFile",
"params": {
"name": "/ServiceWorker/sw.js",
"source": "file"
}
},
{
"if-site-path": "/manifest.json",
"pipeline": "Content-GetFile",
"params": {
"name": "MANIFEST_JSON",
"source": "asset"
}
}