【问题标题】:Service Worker served from different port on a local machineService Worker 从本地机器上的不同端口提供服务
【发布时间】:2017-05-13 16:08:42
【问题描述】:

我正在尝试为我们的网站开发 PWA。在生产和登台阶段,我们从一个领域为所有内容提供服务。然而,在本地机器上的开发中,我们使用 Django 服务器从一个端口提供 HTML,例如

http://localhost:8000

以及从另一个端口使用 Grunt 服务器的资产(包括 JS):

http://localhost:8001

问题是,Service Worker 的范围因此仅限于资产,这是没有用的,我想离线缓存 8000 端口源上的页面。

通过在 Django 中将服务工作者作为自定义视图提供服务,我在某种程度上能够解决这个问题:

# urls.py

url(r'^(?P<scope>.*)sw\.js', service_worker_handler)

# views.py

def service_worker_handler(request, scope='/'):
    return HttpResponse(render_to_string('assets/sw.js', {
        'scope': scope,
    }), content_type="application/x-javascript")

但是,我认为这不是一个好的解决方案。此代码设置了对生产来说根本不需要的自定义路由规则。

我正在寻找的是使用代理的本地修复,或者其他可以让我像所有其他资产一样为服务人员服务的东西。

【问题讨论】:

    标签: django proxy gruntjs localhost service-worker


    【解决方案1】:

    相信这个资源可以帮到你:https://googlechrome.github.io/samples/service-worker/foreign-fetch/

    基本上,您将 Service Worker 托管在端口 8001 上,服务器会按示例所示处理它。 然后你从那里获取它。

    这里更详细地描述了Foreign fetch:https://developers.google.com/web/updates/2016/09/foreign-fetch

    【讨论】:

    • chrome 不再支持外来获取,并且不符合最近的 service worker 规范
    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多