Ruby on Rails 和服务工作者

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.jspublic文件夹,删除.erb扩展名并将范围更改为./,一切都很好,但我没有模板引擎。

有什么建议?

Kar*_*cki 2

出于安全目的,您无法在高于其执行位置的范围内注册 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 )