use*_*717 5 html javascript ruby-on-rails service-worker
我正在尝试在我的 Ruby on Rails 应用程序中使用服务工作者。
我需要在我的app/javascripts/service-worker.js.erb文件中使用一些 erb 功能。Service Worker 注册脚本如下所示:
var registerServiceWorker = function() {
navigator.serviceWorker.register(
'<%= asset_path('service-worker.js') %>',
{ scope: '/assets/' }
)
.then(function() {
console.info('Service worker successfully registered');
})
.catch(function(error) {
console.warn('Cannot register sercie worker. Error = ', error);
});
}
Run Code Online (Sandbox Code Playgroud)
这不起作用;我从来没有在这里得到承诺:
navigator.serviceWorker.ready.then
Run Code Online (Sandbox Code Playgroud)
我也试过./和/范围,但我收到了这个错误:
DOMException: 无法注册 ServiceWorker: 提供的范围 ('/') 的路径不在允许的最大范围 ('/assets/') 下。调整范围,移动 Service Worker 脚本,或使用 Service-Worker-Allowed HTTP 标头来允许范围。
如果我将我移动service-worker.js到public文件夹,删除.erb扩展名并将范围更改为./,一切都很好,但我没有模板引擎。
有什么建议?
出于安全目的,您无法在高于其执行位置的范围内注册 ServiceWorker。
如果您确实需要模板引擎,您可以尝试从 /public 文件夹中的文件动态加载 JS 文件(How do I include a JavaScript file in another JavaScript file?)。目前 Firefox 中尚未实现 Service-Worker-Allowed HTTP 标头 ( https://bugzilla.mozilla.org/show_bug.cgi?id=1130101 )