我对 History.js 在页面加载时的工作方式有点困惑。我做了一些实验,但结果似乎不确定。
我的网站是一个搜索引擎,查询存储在 URL 参数中:?Query=cats
. 该网站纯粹是用javascript编写的。当我进行新搜索、更新新查询并推送状态时,History.js 效果很好。
Query
我的问题是如果用户手动输入包含参数的 URL,如何创建初始状态。在某些情况下,我尝试执行此操作的每一种方式最终都会导致两次运行搜索查询。似乎有冲突的两个用例是:
- 用户在地址栏中手动输入 URL (
mydomain.com?Query=cats
) 并按 Enter。 - 用户导航到外部页面,然后单击后退按钮
在这两种情况下,javascript 都会加载,因此会查看 URL 参数以生成初始状态。
但是,在第二种情况下,History.js 也会触发 statechange事件。
必要代码:
History.Adapter.bind(window,'statechange',function() { // Note: We are using statechange instead of popstate
var s = History.getState();
if(s.data["Query"]){
executeQuery(s.data);
}
});
在 $(document).ready 我有
// Get history from URL
s = getQueryObjectFromUrl(location.href);
if(s["Query"]){
History.pushState(s,'',$.param(s))
}
有没有更好的方法来处理从 URL 参数创建初始状态?