如何从js文件中指向文件网址?这是我想要实现的代码片段。
const currentCacheName = "sample-app-v2";
self.addEventListener('install', (event) => {
const urlToCached = [
'/',
'<%= static_path(@conn, "/css/app.css") %>', // Adding .eex on the js file won't work.
'<%= static_path(@conn, "/js/app.js") %>'
// Add fonts, icon, etc.
];
event.waitUntil(
caches.open(currentCacheName).then(function(cache) {
return cache.addAll(urlToCached);
})
);
});
self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((cacheNames) => {
return Promise.all(
cacheNames.filter((cacheName) => {
return cacheName.startsWith('sample-app-') && cacheName != currentCacheName;
}).map((cacheName) => {
return cache.delete(cacheName);
})
);
})
);
});
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then(function(response) {
if(response) return response;
return fetch(event.request);
})
);
});
我正在尝试使用serviceworker的凤凰,但我需要获取最新的摘要资产文件才能正常工作。
答案 0 :(得分:0)
有几种方法可以做这样的事情。其中之一是将您的JS文件从静态资产转换为模板 - 为此创建路径,控制器,查看并将JS代码移动到模板文件(例如 - 在web / templates / script /下的script.js.eex)你把你的控制器命名为ScriptController,视图就是ScriptView。在这种情况下,您将能够在JS代码中使用模板标记,并在需要时从Web应用程序的根目录提供脚本。这与向Phoenix应用程序添加新路由/页面完全相似。此外,您应该禁用此类路由的伪造保护(从路由器中的管道中删除:protect_from_forgery)。这样做的一个缺点就是你将失去这个脚本的所有JS管道,因此没有像这样的转换和其他东西。