服务人员在同一域上有2个反应应用程序时出现意外行为

时间:2018-09-26 23:01:08

标签: reactjs service-worker create-react-app

我有2个react apps(用create-react-app引导)在同一域上运行。一个应用程序位于根目录(mydomain.com)上,另一个应用程序位于子文件夹(mydomain.com/path)中。捆绑包是使用nginx静态提供的。

当我转到mydomain.com时,将注册根应用程序的服务工作者,并在进一步访问时从缓存中加载index.html。当我访问mydomain.com/path/时,第二个应用程序的服务人员已注册,并且在进一步访问时从缓存中加载了适当的index.html

问题是,当我访问mydomain.com/path不带斜杠)时,根目录上应用程序的服务工作者会加载其index.html,并且基本上会覆盖该服务工作者为子文件夹(/path)注册。但是,如果我访问mydomain.com/path/后跟斜杠),并且子文件夹的服务人员负责,则效果很好。

我不确定这是否是服务人员的预期行为。如果是,如何在不使用斜杠的情况下使其正常工作? (我已经尝试在为子文件夹注册服务工作者时显式设置范围)

1 个答案:

答案 0 :(得分:1)

恐怕这是当前浏览器无法很好处理的情况。

但是,修改根路径上的service-worker并不难,因此只有在路径不是/path时它才是活动的。

if( !self.location.pathname.startsWith('/path') ) {
    // Do root service-worker stuff
}