我很惭愧地说,我花了多少时间与之斗争,尝试了我在这里和其他地方找到的各种方法,我迫切需要一些帮助。这就是我所处的位置:我有一系列交互式SVG图表,其中包含各种链接(到WP帖子),每个链接都分配了帖子链接类。单击后,任何链接帖子的内容都会通过ajax成功加载到图表下方的div中,并在URL中附加一个哈希片段。到目前为止一切都很好。
但我无法以允许浏览器后退按钮功能的方式创建和捕获历史,也无法捕获页面的“ajaxed”状态以允许书签或链接共享。
我曾研究过使用pushState、replaceState和popstate获取浏览器历史记录,认为这是解决方案,但我尝试过的都不管用。因此,我删除了这些不正确的位置,并提供了下面的基本代码,寻求一些指导,以使标题、后退按钮和书签正常工作。下面的代码包含在更大的文档就绪功能中:
//AJAX LOAD SINGLE POST CONTENT ON PAGE
$(function(){
//enable accordion to function within ajaxed content
$.ajaxSetup({
cache:false,
complete: function() {
var cpicons = {
header: "iconClosed",
activeHeader: "iconOpen"
};
$(".accordion").accordion({
header: "h3",
collapsible: true,
heightStyle: "content",
navigation: true,
icons:cpicons
});
$(".accordion-allclosed").accordion({
header: "h3",
collapsible: true,
active: true,
heightStyle: "content",
navigation: true ,
icons: cpicons
});
}
});
$(".post-link").click(function(e) {
var toLoad = $(this).attr("href")+"#single-jobtype-post-container";
//capture slug from post url to use as hash
var slug = $(this).attr("href").match(/[^/]*(?=(\/)?$)/)[0];
window.location.hash = slug;
//insert spinner followed by post's content
$("#single-jobtype-post-container").html("<div class='loading d-all t-all m-all'><i class='fas fa-spinner fa-spin fa-3x'></i></div>");
$("#single-jobtype-post-container").load(toLoad);
e.preventDefault();
});
});
---更新---
正如下面Kamil所建议的,我改变了方法,让URL通过hashchange事件驱动JavaScript。更简单,解决了问题,吸取了教训!这是我的工作代码:
$(function() {
$("#exploration-grid a").click(function(e) {
window.location.hash = $(this).attr("id");
e.preventDefault();
//set the "active" class as appropriate
$('#exploration-grid a').removeClass('active');
$(this).addClass('active');
});
$(window).bind("hashchange", function(){
var newHash = window.location.hash.substring(1);
var postURL = window.location.protocol + "//" + window.location.host + "/" + "jobtypes" + "/" + newHash;
if (newHash) {
$("#single-jobtype-post-container").html("<div class='loading d-all t-all m-all'><i class='fas fa-spinner fa-spin fa-3x'></i></div>");
$("#single-jobtype-post-container").load(postURL);
var hashval = newHash.replace(/-/g, " ");
hashtitle = hashval.toUpperCase();
document.title = document.title + " - " + hashtitle;
};
});
$(window).trigger("hashchange");
});