我已经在本地测试应用程序上实现了 History.js。一切似乎都正常,但是如果我在浏览器中按下后退按钮,以前的内容不会恢复。
当用户按下后退按钮时,我是否真的必须再次手动加载内容(即进行另一个 ajax 调用)?那么github是如何做到的呢?我看到他们在单击代码树中的后退按钮时没有进行另一个 ajax 调用。
这是我的代码:
History.Adapter.bind(window,'statechange',function()
{
var State = History.getState();
History.log(State.data, State.title, State.url);
});
$('a').each(function(index, link) {
if ($(link).attr('data-ajax-disabled') != 'true') {
$(link).click(function(event)
{
var clips = $(this).attr('data-ajax-clips') || '';
$.ajax($(this).attr('href'),
{
data: {_clips:clips},
success: function(data)
{
var data = $.parseJSON(data);
History.pushState({state:1}, data.title || document.title, 'http://127.0.0.1/site/www/');
$.each(data.clips, function(key, val)
{
$(key).replaceWith(val);
});
}
});
return false;
});
}
});
data.clips 是一个 json 数组,其中包含 html 对象的 id 作为键和实际的 html 内容作为值。例如
'#header' => '标题 div 中的内容'
如前所述,替换工作正常。我在标题中输出一个随机数。每次单击链接都会在标题中吐出另一个随机数。但是,如果我按下后退按钮,数字保持不变,只会恢复标题(也是随机数)。