0

我希望能够用 html5 popstate 做两件事,我没有使用任何插件,只是这两种方法:

推送状态:

function contentLoaded(...) {
    ...
    window.history.pushState({ pageUrl: url }, url, url);
    ...
}

流行状态:

$(window).bind("popstate", function (e) {
    if (event.state) {
        loadContent(event.state.pageUrl);
    }
});

现在,如果我删除一条记录,I want to avoid popping a state which couldn't be loaded只需跳过它并尝试弹出下一条记录。

第二个问题是:(How can I avoid try popping from an empty stack我的应用程序中有一个后退按钮,但我可以以适当的理由摆脱它),但要清楚是否无法加载内容或堆栈中是否没有更多项目.

4

1 回答 1

1

历史并不意味着事后改变。您应该将 push/popstate 功能与内容加载功能分开;想想典型客户端 mvc 框架中的“路由器”或“导航器”模式。如果一个状态变得无效,内容加载代码可以“重定向”到另一个状态(通过调用 pushState),就像您在常规服务器端应用程序中所做的那样。

提醒一下,无论是在内部弹出状态还是使用相同的 url 实际加载页面,客户端应用程序都应该以相同的方式工作,即 HTML5 历史记录支持必须是透明的,或者换句话说,单独的 url 必须包含所有构造特定视图的信息(但在 popstate 的情况下,我们可以作弊并重用现有状态以加快速度)。

于 2013-04-24T04:14:14.197 回答