我一直在做我的一个项目——完整的(重要的)JavaScript 可以在这里找到。我希望包含history.js,以便用户也可以使用浏览器的上一个和下一个按钮进行导航。此外,我希望生成的 URL 可以访问,即使它们不存在。这些 URL 由历史 API 生成,因此未链接到 HTML 文档。
我已经做了什么
通过查看插件的API Exposed 部分并阅读Mozilla 的文档,我已经成功地完成了这项工作:
- 使用界面的下一个、上一个和基本链接导航时,URL 是正确的
- 使用界面的下一个、上一个和基本链接导航时,标题是正确的
(精简)代码是:
document.title = $(".parentSection.base").data("title");
// Going forward
var nextClick = $("a.next_link");
nextClick.click(function(d) {
var nUrl = parentSection.next().data("url");
History.pushState(null, null, nUrl) ;
document.title = parentSection.next().data("title");
d.preventDefault();
});
// Going backwards
var prevClick = $("a.prev_link");
prevClick.click(function(e) {
var pUrl = parentSection.prev().data("url");
History.pushState(null, null, pUrl) ;
document.title = parentSection.prev().data("title");
e.preventDefault();
});
// Going to "Base" position
var baseClick = $("a.base_link");
baseClick.click(function(f) {
var bUrl = $(".parentSection.base").data("url");
History.pushState(null, null, bUrl);
document.title = $(".parentSection.base").data("title");
f.preventDefault();
});
这可以正常工作。
我似乎无法完成的事情
即使这工作得非常巧妙,如果没有最终功能,它也是无用的:
- 现在生成了 URL(例如
/lamp
,/desk
等等),但是当用户直接转到这些链接之一(或只是重新加载页面)时,他或她将收到该 URL 不存在的消息 - 即使浏览器的导航按钮是可点击的(并且 url 会相应地改变),它根本不会改变内容。
任何人都可以对此提供任何反馈吗?我已经为此工作了很长时间,以至于我的背部受伤了。
我试图从 cjhveal 提供的代码中工作,并且到目前为止得到了这个(仅用于测试目的):
History.Adapter.bind(window,'statechange',function(){
var State = History.getState();
History.log(State.data, State.title, State.url);
$(".parentSection[data-url='" + State.title + "']").css({
"left": "0",
"top": "0"
});
});
奇怪的是,我无法让 History.js 记录到正确的标题......当我记录一个页面时,它返回如下:("lamp", "bramvanroy.be/fullScreenSection/lamp"
分别为title
和url
)而我需要获取该data-title
部分对象中定义的标题。然而,我仍然调整了代码,以便 tit 应该data-url
按照 section 中定义的方式工作,与返回的属性相同title
,但仍然没有任何反应!