当url不再存在时如何处理popstate?

时间:2013-04-24 02:20:06

标签: html5 pushstate popstate

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

推送状态:

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

Pop State:

$(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(我的应用程序中有一个后退按钮,但我可以用合适的理由摆脱它),但是如果无法加载内容则要清楚或者如果堆栈中没有其他项目。

1 个答案:

答案 0 :(得分:1)

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

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