我有一个网站,我不想让人们创建帐户。这是一个新闻Feed,每篇新闻文章都有分类。我希望允许人们标记他们感兴趣的类别,以便下次他们访问该网站时,它只会显示已标记类别的新闻。
我将标签保存在indexedDB中,据我所知,这可以在服务工作者中使用。
因此,在我的服务人员中,我想要"拦截"请求def fun1():
mysum = 0
def fun2(mysum, arg):
mysum += arg
fun2(mysum, 1)
fun2(mysum, 2)
fun2(mysum, 3)
print mysum
,检查indexDB此人感兴趣的类别,并添加一些标题,如with open('merged.md', 'w') as out_f:
for filename in glob.glob('*.md'):
with open(filename) as f:
out_f.write(f.read())
,以便我的服务器只能响应这些类别的动态html。
但是,我努力让服务工作者正确缓存我的根响应。在我的serviceworker.js中,我为www.my-url.com
处理程序的每个'x-my-customer-header': 'technology,physics,sports'
控制台。没有与我的根网址相关的请求。我现在正在我的本地主机上进行测试,但我只看到了对css&的抓取请求。 js文件。
这是我的onFetch:
event.request
我使用rails,因此没有index.html存在要缓存,当用户点击我的网址时,该页面是从我的新闻#controller控制器动态提供的。
我实际上正在使用gem serviceworker-rails
我做错了什么?如何让我的服务工作者保存根文件并拦截添加标头的请求?这甚至可能吗?
答案 0 :(得分:3)
此处归功于杰夫波斯尼克his answer on constructing a new Request。您需要使用提取来响应,该提取会创建一个可以添加标题的新请求:
self.addEventListener('fetch', event => {
event.respondWith(customHeaderRequestFetch(event))
})
function customHeaderRequestFetch(event) {
// decide for yourself which values you provide to mode and credentials
const newRequest = new Request(event.request, {
mode: 'cors',
credentials: 'omit',
headers: {
'x-my-custom-header': 'The Most Amazing Header Ever'
}
})
return fetch(newRequest)
}