History.js的实现

Ker*_*ott 15 html ajax history.js

我正在尝试为我的ajax网站实现History.js,以便我可以使用前进和后退按钮甚至书签.然而,@ https://github.com/browserstate/History.js/这个例子让我对如何实现它感到困惑.有没有人有一个关于如何使用它的简单教程或示例.我们可以用来启动示例的示例是导航链接,例如

<script type="text/javascript">
window.onload = function() 
{
function1();
};
Run Code Online (Sandbox Code Playgroud)

<ul>
<li><a href="javascript:function1()">Function1</a></li>
<li><a href="javascript:function2('param', 'param')"</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

zac*_*urn 36

我无法完全理解如何使用History.js.以下是来自wiki的一些代码以及我的解释说明:

1.获取history.js对象的引用

获取对History.js对象引用窗口的引用.历史(Capitol'H').

var History = window.History;
Run Code Online (Sandbox Code Playgroud)

要检查是否启用了HTML5历史记录,请检查History.enabled.如果不是,History.js仍将使用哈希标记.

History.enabled
Run Code Online (Sandbox Code Playgroud)

2.收听历史记录更改并从此处更新您的视图

要侦听历史记录状态更改,请绑定到Adapter对象的statechange事件.

History.Adapter.bind(window,'statechange',function(){ 
    var State = History.getState(); 
    History.log(State.data, State.title, State.url);
});
Run Code Online (Sandbox Code Playgroud)

3.使用推或替换来操纵历史状态

要向历史记录添加状态,请调用pushState.这将在历史堆栈的末尾添加一个状态,它将触发'statechange'事件,如上所示.

History.pushState({data:"any kind of data object"}, "State Title", "?urlforthestate=1"); 
Run Code Online (Sandbox Code Playgroud)

要将状态替换为历史记录,请调用replaceState.这将替换历史堆栈中的最后一个状态,它将触发"statechange"事件,如上所示.

History.replaceState({data:"any kind of data object"}, "State Title", "?urlforthestate=1"); 
Run Code Online (Sandbox Code Playgroud)

pushState和replaceState之间的区别在于pushState会将状态添加到历史列表中,replaceState将覆盖最后一个状态.

注意:pushState和replaceState序列化数据对象,因此在那里使用最少的数据.

4.如果要为用户添加其他ui以便能够导航历史记录,请使用导航命令

使用返回并通过代码导航历史记录.

History.back();
History.go(2);
Run Code Online (Sandbox Code Playgroud)

附加:使用带有历史记录的"a"标签

要使用带有历史记录的"a"标记,您需要拦截单击事件并阻止浏览器使用event.preventDefault()方法进行导航.

例:

<a href="dogs/cats" title="Dogs and cats">Dogs and Cats</a>

$('a')?.click(function(e){
    e.preventDefault();
    var url = $(this).attr('href');
    var title = $(this).attr('title');
    History.pushState({data:title}, title, url);
})?;
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.