我正在尝试一些基本的服务工作者。服务工作者本身将在服务工作者第一次注册时正常工作。我总是得到的问题是,一旦该人将来重新访问该网站(例如第二天),并尝试访问受.htaccess
/ .htpasswd
个受保护的目录。他们没有像往常那样得到对话框,而是直接转向401错误。
这就是我在HTML中的脚本标记中注册服务工作者的方式。
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
我在sw.js
本身尝试过几种不同的方法,每次遇到同样的错误。这是一个来自谷歌空降师的例子,我相信......
self.addEventListener('install', e => {
const timeStamp = Date.now();
e.waitUntil(
caches.open('somename').then(cache => {
return cache.addAll([
`/`,
`/index.html`,
`/css/tour-2.css`
])
.then(() => self.skipWaiting());
})
);
});
self.addEventListener('activate', event => {
event.waitUntil(self.clients.claim());
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request, {ignoreSearch: true}).then(response => {
return response || fetch(event.request);
})
);
});
是否有人知道是否可以将服务工作者用于具有.htaccess
受保护目录的网站?
感谢。
答案 0 :(得分:1)
一种治愈方法是:
self.addEventListener('fetch', event => {
// Exclude admin panel.
if (0 === event.request.url.indexOf("https://www.my-site.com/my-protected-area")) {
return;
}
应该有帮助。