【发布时间】:2018-12-02 21:42:04
【问题描述】:
如果路径包含__browserfs__,我有从 BrowserFS 加载文件的 Service Worker,简化代码如下:
function loadDependecies() {
self.skipWaiting().then(function() {
if (!self.fs) {
self.importScripts('https://cdn.jsdelivr.net/npm/browserfs');
BrowserFS.configure({ fs: 'IndexedDB', options: {} }, function (err) {
if (err) {
console.log(err);
} else {
self.fs = BrowserFS.BFSRequire('fs');
self.path = BrowserFS.BFSRequire('path');
}
});
}
});
}
self.addEventListener('install', loadDependecies);
self.addEventListener('activate', loadDependecies);
self.addEventListener('fetch', function (event) {
event.respondWith(new Promise(function(resolve, reject) {
if (local) {
console.log('serving ' + path + ' from browserfs');
if (!self.fs) {
(function loop() {
if (!self.fs) {
setTimeout(loop, 400);
} else {
serve();
}
})();
} else {
serve();
}
} else {
if (event.request.cache === 'only-if-cached' && event.request.mode !== 'same-origin') {
return;
}
//request = credentials: 'include'
fetch(event.request).then(resolve).catch(reject);
}
}));
});
当我有一段时间没有与应用程序交互时,再次打开它然后尝试获取本地文件它一直在加载可能是因为无限循环,我需要手动重新加载服务工作者(使用开发工具)来获取页面。
所以我的问题是如何正确调用 importScripts 在 Service Worker 中加载 BrowserFS?
【问题讨论】:
-
你想通过在函数内部调用
importScripts来实现什么?为什么不马上加载呢? -
@smnbbrv 因为我需要在两个事件中调用它,如果我在外部调用它,它将被删除,我读过你不应该依赖服务工作者中的全局上下文,我可以确认添加到 self 的值在 service worker 生命周期中被删除。
标签: javascript dependencies service-worker