gpt4 book ai didi

javascript - Ruby on Rails 和服务 worker

转载 作者:搜寻专家 更新时间:2023-11-01 05:04:42 25 4
gpt4 key购买 nike

我正在尝试在我的 Ruby on Rails 应用程序中使用服务 worker 。

我需要在我的 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);
});
}

这行不通;我从来没有在这里得到 promise :

navigator.serviceWorker.ready.then

我也尝试了 .// 作用域,但我得到了这个错误:

DOMException: Failed to register a ServiceWorker: The path of the provided scope ('/') is not under the max scope allowed ('/assets/'). Adjust the scope, move the Service Worker script, or use the Service-Worker-Allowed HTTP header to allow the scope.

如果我将我的 service-worker.js 移动到 public 文件夹,删除 .erb 扩展名并将范围更改为 ./,一切正常,但我那里没有模板引擎。

有什么建议吗?

最佳答案

现在有一个 gem ,serviceworker-rails这将允许您在 Assets 管道中代理对 serviceworker 脚本的请求。由于浏览器注册 serviceworker 脚本的方式,最好避免缓存它们。

Sprockets 会对 Assets 进行指纹识别,而 Rails(或您的网络服务器)通常会提供来自 /assets 目录的具有积极缓存 header 的编译文件。

我们想要的是自定义服务 worker 路径和响应 header 的能力并且仍然进行 Sprockets 预处理,即 CoffeeScript/ES2015 到 JavaScript 的转换。

serviceworker-rails gem 将中间件插入您的 Rails 堆栈,它将代理对 /serviceworker.js 的请求(例如)到相应的指纹编译 Assets 生产。在开发中,您会得到预期的自动重新加载行为。您也可以在不同的范围内设置多个 serviceworker。

https://github.com/rossta/serviceworker-rails

关于javascript - Ruby on Rails 和服务 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com