我正在创建一个我想创建Ajax样式的网站的小项目。内容加载了jQuery的load()
。正如你们中的一些人所知道的,这种情况的缺点是URL不会相应地显示内容。要完成这项工作,您可以使用pushState()
。由于这不支持跨浏览器,因此我使用插件history.js
。pushState()和popState():操纵浏览器的历史
这工作相当好,但问题是我的后退和前进按钮不工作,因为他们应该,我不知道我做错了什么。 URL正在改变,内容也一样,但标题完全没有改变。标题指的是浏览器窗口的窗口(或标签)的标题。即加载的页面的<title>
或引用该页面的链接的标题属性(它们是相同的)。我认为这与我只打电话给我需要标题的一部分页面有关(即通过将#content
添加到load()
)。我仍然想要那个页面的标题。这是我迄今为止所做的一个测试案例。 (不提供任何更多,因为12月28日2013年)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将活动类添加到已被单击的链接。我怎样才能确保这个变化相应的历史?所以当用户导航回来时,正确的链接会突出显示?
所以这三个问题是:
- 拿到冠军去的时候向前和向后
- 前进时优化炫魅的加载时间
- 修复活动类和落后 工作
欢迎所有帮助!
注意1:我想建立在history.js和我自己的脚本上,并继续支持< HTML5
浏览器。我宁愿这样做,因为1.我知道这必须工作,只是出了问题。 2.如果我能看到自己的解决方案并在我已经编写的脚本中执行它,而不是找出一个全新的脚本,那将节省时间。
备注2:赏金将只给予他或她谁可以回答我所有的问题(3)!
你还是不对,请看这样的例子http://stackoverflow.com/questions/6622449/why-is-history-pushstate-not-supported-in-ie-are-there-some -other-ways-to-ach/9470183#9470183 – devote
您的评论并不真正有用。我不需要执行history.js(还),我只是想了解pushState现在正在做什么。我想解决这个问题。 –
我的评论指出你的错误,如何选择处理事件的方法。拦截事件popstate的方法,您发布的是不正确的,将它从方法中删除时点击。 – devote