sup*_*olx 4 python flask service-worker progressive-web-apps
我正在使用 Python 的微框架 Flask 创建一个网站。我最近发现了渐进式网络应用程序,并且正在尝试尝试它。据我了解,我必须(除其他外)注册一名服务人员。这就是我所坚持的。我正在使用一个 base.html 模板,该模板扩展到由 Flask 渲染的其他 .html 模板。在我的 base.html 文件中,我包含了以下代码:
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register("service-worker.js").then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
我知道这行不通,因为 service-worker.js 文件需要与 html 文件位于同一目录中,但因为它们是由 Flask 渲染的,所以我不知道需要将其放置在哪个目录中service-worker.js 文件使其正常工作。我尝试将其放在模板所在的同一目录中以及根文件夹中(然后在注册脚本中指向该位置),但这不起作用。
Python 文件位于网站根文件夹中。包含 html 文件的模板文件夹也位于根文件夹中 - 以及包含 css/js/images 的静态文件夹。
所以我的问题是,是否可以使用 Flask 作为后端来注册 Service Worker(或创建 PWA)?如果是这样,我该如何注册?先感谢您!
编辑:
我不确定为什么我的问题被标记为重复。我不想从我的 /static/js 文件夹中为服务工作者提供服务。正如我上面所说,据我了解,service-worker.js 文件需要位于与其引用的 html 文件相同的位置。除非我遗漏了一些东西,否则我不知道这与如何使用 url_for 链接静态文件是同一个问题。
小智 5
使用 Flask,将sw.js文件放在静态文件夹中但在 之外js folder,我设法解决了routes使用make_responsefromflask
我编写了以下代码作为通往sw.js
from flask import make_response, send_from_directory
@app.route('/sw.js')
def sw():
response=make_response(
send_from_directory('static',filename='sw.js'))
#change the content header file. Can also omit; flask will handle correctly.
response.headers['Content-Type'] = 'application/javascript'
return response
Run Code Online (Sandbox Code Playgroud)
Edit this line from
navigator.serviceWorker.register("service-worker.js").then(function(注册) {
To :
navigator.serviceWorker.register("/sw.js").then(function(注册) {
您还可以指定范围;Service Worker 应该涵盖的范围如下:
navigator.serviceWorker.register("/sw.js", {scope:"/"}).then(function(注册) {
请记住:sw.js指的是您命名的文件service-worker.js
内联 js的完整代码base.html是:
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register("/sw.js", { scope: '/' })
.then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
Run Code Online (Sandbox Code Playgroud)
完整代码app.py与上面的示例相同
并且不要忘记你的路线 @app.route("/sw.js")
让我知道这是否有帮助
| 归档时间: |
|
| 查看次数: |
5027 次 |
| 最近记录: |