0

我想使用 HTML5 历史 API 和带有<a>标签的经典链接。

我从 ajax 开始/page1/并加载资源/recource/

然后我用window.history.pushState(push_data, document.title, url). 然后我通过经典链接转到另一个页面,<a href = '/page2'> 然后单击浏览器中的后退按钮。但不是显示/page1/修改过的页面,而是显示页面中的数据/resource/- 只是纯文本数据或 json 或你在/rescource/.

如何让浏览器混合历史 API 和经典链接?

4

1 回答 1

0

它完全按照您所做的。

你在:/page1它在堆栈的顶部,然后 push /resource,然后 push /page2。所以堆栈看起来像这样。

/page2
/resource
/page1

History API 只允许开发人员推送 URL(以及带有一些数据的对象),仅此而已......例如:如果您说您刚刚创建的动物网页应该推送状态,google.com那么您将在堆栈上google.com,当单击返回按钮时,您将真正转到 google.com。

网络上最重要的是 URL 代表一些数据。因此,/resource当 URL 不起作用或显示不同的内容时,您不应该将 URL 推送到历史堆栈中 - 现在您的示例将/resourceURL 与两个不相同的内容相关联

  1. 显示内容的网页/resource
  2. 文件/resource本身

但他们不一样!这就是为什么你应该推送类似/page1WithLoadedResource或(我认为是最好的)/page1/resourcepage1?loaded=resource任何对你有用的东西,并确保当你在浏览器中输入这个 URL 时,它会做你想要的,无论你是否在在服务器或客户端上......在客户端上,您可以只显示空白页面模板,然后/resource完全按照您在启动/page1和加载时所做的那样通过 AJAX 加载/resource

使用某些客户端 MVC/MVVM 框架时,您可以更轻松地做到这一点,但这远远超出了这个问题的范围,但您应该始终将 URL 与用于书签、处理、REST API 等的资源链接起来......

于 2013-04-20T23:37:09.650 回答