我正在做一个小项目,我想在其中创建一个 Ajax 风格的网站。内容使用 jQuery 加载load()
。正如你们中的一些人所知,这样做的不利方面是 URL 不会根据显示的内容而相应更改。要完成这项工作,您可以使用pushState()
. 因为这不支持跨浏览器,所以我使用了插件history.js
.
这工作得很好,但问题是我的后退和前进按钮没有正常工作,我不知道我做错了什么。URL 正在正确更改,内容也在更改,但标题根本没有更改。标题我的意思是显示为浏览器窗口的窗口(或选项卡)的标题。即<title>
加载的页面或指向该页面的链接的标题属性(它们是相同的)。我认为这与我只调用我需要其标题的页面部分(即通过添加#content
到load()
)这一事实有关。我仍然想要那个页面的标题。这是我到目前为止的测试用例。(自 2013 年 12 月 28 日起不再可用。)jQuery 文件:
$(document).ready(function () {
var firstLink = $("ul > li:first-child > a");
var menuLink = $("ul > li > a");
var firstLoadedHtml = firstLink.attr("href") + " #content";
$("#sectionContainer").hide().load(firstLoadedHtml).fadeIn("fast");
firstLink.addClass("active");
menuLink.click(function(e) {
history.pushState(null, null, this.href);
e.preventDefault();
e.stopImmediatePropagation();
var CurLink = $(this);
var newLoadedHtml = CurLink.attr("href") + " #content";
var oldSection = $(".contentPage");
$("#sectionContainer").hide().load(newLoadedHtml).fadeIn("fast");
menuLink.removeClass("active");
CurLink.addClass("active");
});
$(window).bind('popstate', function() {
var returnLocation = history.location || document.location;
$('#sectionContainer').load(returnLocation + "#content");
});
});
我还注意到,当返回到基本页面(即 /sectionLoaderTest/)时,它会暂时变为空白,并且仅在一段时间后才会加载第一页的内容。有没有办法优化这个?
此外,我正在使用 jQuery 向已单击的链接添加一个活动类。我怎样才能确保这会随着历史的变化而改变?以便在用户导航返回时突出显示正确的链接?
所以这三个问题是:
- 前进和后退时使标题正常工作
- 优化首页加载时间
- 前进后退时修正active-class
欢迎大家帮忙!
注意 1:我想在 history.js 和我自己的脚本上构建,因此保持对< HTML5
浏览器的支持。我更喜欢这个,因为 1. 我知道这必须有效,只是出了点问题。2. 如果我能看到一个解决方案并在我已经编写的脚本中实现它,而不是找出一个全新的脚本,这将节省时间。
注意 2:赏金只会提供给能够回答我所有问题 (3) 的人!