关于jquery:History.js和状态

History.js and states

有人可以向我解释情况吗?

例如,带有history.js插件。

1
History.pushState({state:1},"State 1","?state=1"); // logs {state:1},"State 1","?state=1"

我理解最后一个参数,因为它是被推送到地址栏的URL,但是我不知道前两个参数。理解这些内容将有助于我在自己的网站中实现history.js,因为我在后退/前进导航时遇到了麻烦。

在Mozilla开发人员网站上显示:

state对象-状态对象是一个JavaScript对象,它与pushState()创建的新历史记录条目相关联。每当用户导航到新状态时,都会触发popstate事件,并且该事件的state属性包含历史记录条目的状态对象的副本。
状态对象可以是任何可以序列化的对象。由于Firefox将状态对象保存到用户的磁盘上,以便在用户重新启动浏览器后可以将其还原,因此我们对状态对象的序列化表示施加了640k个字符的大小限制。如果将序列化表示形式大于此形式的状态对象传递给pushState(),则该方法将引发异常。如果您需要更多空间,建议您使用sessionStorage和/或localStorage。

仅声明使用AJAX加载的代码的副本吗?还是仅仅是该代码的表示形式,以便可以调用它?

对此有任何见识,不胜感激!


状态对象是任何Javascript对象-它可以是单个变量,也可以是巨大的函数和值的哈希表。您想要在那个时间点使用任何数据来表示应用程序的"状态"。这样的事情很常见:

1
2
3
4
5
6
7
8
var viewModel = {
    title: 'FAQs',
    url: 'faqs.html',
    favouriteColor: 'green',
    stepsCompleted: 4
};

history.pushState(viewModel, viewModel.title, viewModel.url);

这基本上是在创建一个对象,该对象具有"记住"并在以后恢复状态所需的任何内容-例如,如果用户遵循向导式的逐步说明或类似形式。

第二个参数title暂时被浏览器忽略,但是可能用于前进/后退导航等用例,在这些情况下可能需要更新页面标题。