Backbone Marionette应用程序和后退按钮上的复杂url历史

时间:2016-01-19 21:03:40

标签: backbone.js marionette

有两个Web应用程序,我们的和另一个团队。另一个团队的网络应用是http://otherteam.com,我们的应用是http://myteam.com

http://otherteam.com网页上,他们有一个href链接指向我们的页面http://myteam.com/config?lang=en。当我们的Web应用程序(实际上是Marionette AppRouter的任务)收到这种路由或路径时,它将解析它并设置语言配置,然后我们有一个代码将用户重定向到最终的网页http://myteam.com/landingpage

我们使用的代码是

Backbone.history.navigate('landingpage', {replace: true});

将用户重定向到最终目的地。

不幸的是,当用户点击浏览器的“后退”按钮时,它不会返回http://otherteam.com。它将返回http://myteam.com/config?lang=en,这仍然是我们自己的应用程序。会发生什么是Marionette应用程序路由器将再次解析它,类似于我上面描述的方式。用户将被带回http://myteam.com/landingpage

所以我改变了

// Backbone.history.navigate('landingpage', {replace: true})

现在我正在使用

history.replaceState({}, '', 'landingpage');

当我点击“返回”按钮时,顶部栏上的网址会显示http://myteam.com/config?lang=en,但它不再重新加载我们的目标网页,这很好。但是,在我再次单击“返回”按钮之前,页面没有任何反应。在第二次单击“返回”按钮后,我回到了http://otherteam.com,这很棒,但我必须单击“返回”按钮两次。

1 个答案:

答案 0 :(得分:1)

问题是您正在将用户从/ config?lang = en重定向到另一个页面,因此当您单击后退时,它们会落在上一页上,然后再次重定向回到登录页面。

这里最简单的解决方案是让otherteam.com链接到您的目标网页并传递参数 - http://myteam.com/landingpage?lang=en。多次重定向用户绝不是一个好主意,而且几乎总是没必要。

收到lang配置参数后,可能会将其保存到本地存储,以便在整个应用程序中的任何位置检索它。