代码如下:
$(function() { $('a').bind('click', function() { var actionObj = $(this); var actionText = actionObj.text(); var stateObj = { title : actionText, url : actionObj.attr('href'), msg : actionText }; window.history.pushState(stateObj, actionObj, actionObj.attr('href')); }); window.onpopstate = function(e) { console.log(e.state); }; })
查了一些资料,完全不知道问题在哪里……
chrome 或者 firefox 都不行……不知道哪里做错了……
PHPz2017-04-10 12:43:28
其实你只需要理解一点,onpopstate
是在history.back()
之后调用的。所以这个时候e.state
里返回实际上是back
之后的状态,比如我在下面的代码里。一次push了两个state,当我点击一次后退的时候{page : 2}
的state已经pop出去了,这时候e.state
里就只剩下{page : 1}
了。
(function() { $('a').bind('click', function() { window.history.pushState({page : 1}, 'test', '#test1'); window.history.pushState({page : 2}, 'test', '#test2'); return false; }); window.onpopstate = function(e) { console.log(e.state); }; })();
巴扎黑2017-04-10 12:43:28
如果要获得pop出去的那个状态,可以先replaceState,然后再pushState
window.history.replaceState({page : 1}, '', '');
window.history.pushState({}, '', '#test1');
这样popstate事件触发的时候就能获得event.state的值为{page: 1}