它完全按照您所做的。
你在:/page1
它在堆栈的顶部,然后 push /resource
,然后 push
/page2
。所以堆栈看起来像这样。
/page2
/resource
/page1
History API 只允许开发人员推送 URL(以及带有一些数据的对象),仅此而已......例如:如果您说您刚刚创建的动物网页应该推送状态,google.com
那么您将在堆栈上google.com,当单击返回按钮时,您将真正转到 google.com。
网络上最重要的是 URL 代表一些数据。因此,/resource
当 URL 不起作用或显示不同的内容时,您不应该将 URL 推送到历史堆栈中 - 现在您的示例将/resource
URL 与两个不相同的内容相关联
- 显示内容的网页
/resource
- 文件
/resource
本身
但他们不一样!这就是为什么你应该推送类似/page1WithLoadedResource
或(我认为是最好的)/page1/resource
或page1?loaded=resource
任何对你有用的东西,并确保当你在浏览器中输入这个 URL 时,它会做你想要的,无论你是否在在服务器或客户端上......在客户端上,您可以只显示空白页面模板,然后/resource
完全按照您在启动/page1
和加载时所做的那样通过 AJAX 加载/resource
。
使用某些客户端 MVC/MVVM 框架时,您可以更轻松地做到这一点,但这远远超出了这个问题的范围,但您应该始终将 URL 与用于书签、处理、REST API 等的资源链接起来......