【问题标题】:History.js and statesHistory.js 和状态
【发布时间】:2012-10-02 16:42:34
【问题描述】:

有人可以向我解释一下状态吗?

例如,使用history.js 插件。

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

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

Mozilla dev 网站上写着:

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

state 只是使用 AJAX 加载的代码的副本吗?或者它只是该代码的表示,因此可以调用它?

对此的任何见解表示赞赏!

【问题讨论】:

    标签: jquery ajax html browser-history history.js


    【解决方案1】:

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

    var viewModel = {
        title: 'FAQs',
        url: 'faqs.html',
        favouriteColor: 'green',
        stepsCompleted: 4
    };
    
    history.pushState(viewModel, viewModel.title, viewModel.url);
    

    这基本上是创建一个包含任何需要“记住”并在以后恢复状态的对象 - 例如,如果用户正在遵循向导式的逐步表单等。

    第二个参数title 暂时被浏览器忽略,但可能用于向前/向后导航等可能需要更新页面标题的用例。

    【讨论】:

    • 那么示例 viewModel 只会在调用 pushState 时代表屏幕上的 html?如果我再次调用该状态,使用 history.js 它将加载它的代表 html?
    • 没错。不,它不会加载 HTML,您必须自己执行此操作,但理论上您的视图模型中有足够的信息来执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多