Javascript ajax页面加载内容,具有历史实现和hashtag功能

Javascript ajax页面加载内容,具有历史实现和hashtag功能,javascript,ajax,html5-history,popstate,Javascript,Ajax,Html5 History,Popstate,我正在扩展基于ajax加载程序的功能,如下所示 还有这个 如果我有像这样使用锚的页面,我似乎无法粉碎一个bug Ajax页面的加载方式是这样的,数据上有(某种程度上是因为从json检索)目标页面- //<a data-mia="home" href="/home">Home</a> if ( el.getAttribute('data-mia') in pages ){ el.addEventListener('click', clickHandler,

我正在扩展基于ajax加载程序的功能,如下所示 还有这个

如果我有像这样使用锚的页面,我似乎无法粉碎一个bug

Ajax页面的加载方式是这样的,数据上有(某种程度上是因为从json检索)目标页面-

//<a data-mia="home" href="/home">Home</a>
if ( el.getAttribute('data-mia') in pages ){
        el.addEventListener('click', clickHandler, true);
我也尝试过添加此选项,但似乎不是正确的方法,或者我缺少如何与正确的前一个选项组合:

 window.addEventListener('hashchange', function() {
      console.log('The hash has changed!');
      event.preventDefault();
      // nasty hack #footer for contact link.
      // if (window.location.lastIndexOf('#footer') > 0)
      document.querySelector('#footer').scrollIntoView();
    }, false);
现在有了这样的2个,锚和ajax加载可以工作,但是当涉及散列时,fwd/back会被窃听。像这样:

导航:/page1/2/2#页脚/3

后退:/3/2#页脚(不去锚定)/2(去这里锚定)

我不想去参加像这样的一个单打比赛

<a onclick"js:goto('footer')" href="#footer">Contacto</a>

服务器加载内容['body'];
Lorem ipsum dolor sit amet,是一位杰出的献身者。这是一个自由的世界。最后一个港口。晨曦是生命之源,是生命之源。佩伦茨克居民莫比·特里斯蒂克
塞内特斯、内特斯和马莱苏阿达是著名的埃吉斯塔斯土尔皮斯人。莫比·诺伊库利斯·努克。这是一种新的解决方案。调味品中的脯氨酸,eget ullamcorper orci。在狮子座之前的一段时间里,我们的生活是暂时的。佩伦茨克封建制
乌纳·奎斯·朗卡斯。佩伦特斯·康瓦利斯·勒姆·利伯罗(lorem libero)和蒂尼·瓦里乌斯(nibh varius ac.Maecenas magna urna),阿利夸姆·森佩尔(aliquam semper)的马蒂斯(mattis),亨德雷特·塞德·利伯罗(hendrerit sed libero)。这是我的封建制度,只是暂时的。杜伊斯·贾斯托·迪亚姆,维韦拉欧盟索达尔公司,accumsan
非ex.Fusce-sed-suscipit sem。做一件事吧,温文尔雅的生活,奉献给我们。这是我的错误。金丝雀花。发酵前庭。普洛因-乌兰柯珀-普洛斯大鼠
临时的。Suspendisse suscipit suscipit urna quis placerat。在justo pulvinar的Maecenas,varius nunc non,名言justo。mollis tortor的库拉比图尔,在康斯奎特安特。两人在一起,我是莫莱斯蒂和佩伦茨克。这是我的荣幸
索利西图丁·菲尼布斯。这是一个很好的例子。至理名言,我的生命,我的生命,我的生命,我的生命,我的生命,我的生命,我的生命。我们的家族成员都是索达尔家族的成员
tincidunt。菲舍勒斯调味品朗卡斯。Nam vel调味品purus和venenatis odio。Nam nisl tortor,位于马萨拉齐尼亚省埃吉斯塔斯维尔的福西布斯。狮子座的牧师。莫里斯·塞德·努克。Nam enim eros,accumsan sit amet pulvinar
我是bibendum坐amet neque。乌特·马格纳·努拉,帝国的洛博蒂斯,埃尼姆的萨吉提斯。你的猫科动物是神圣的。一个自由的厄洛斯,一个自由的弗林斯,一个自由的马萨。Praesent ornare,前身份证持有人,dolor neque
埃利芬德·马格纳,一位名叫索利西图丁·马萨的记者。莫利斯麦格纳的佩伦茨克,达皮布斯奥奇的佩伦茨克。自由的弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形弓形。努拉坐在奥古斯·朗卡斯的阿梅特·努拉身边。奥古斯元素莫尔比,
eget luctus ex.Vivamus neque neque,bibendum et的tristique,posuere vel ligula。马萨酵母菌的前庭。多涅克和努拉·朗卡斯,乌兰姆·科佩尔·埃尼姆·维塔伊,康瓦利斯·奥迪奥。艾蒂安·莫里斯·利奥(Etiam Consequeat mauris leo),怀孕前门卫
威尔。莫里斯是一位高贵的人物。泰勒斯河、尤兰科佩尔河、马萨河。悬垂弧,各种各样的斜坡,维韦拉斜坡和无底斜坡。帕特·奥奇,奥纳雷·奥古斯。不要做一个乌尔特里塞斯努克。
阿利奎特奥古斯的库拉比图。Aenean pharetra Placelat扫描电镜。Donec blandit euismod ipsum,一个流苏。取消了世袭的梅特斯。纳姆·莫利斯、维韦拉·洛博蒂斯、奥迪奥·普鲁斯·康瓦利斯·莫里斯、ac accumsan sem turpis和eu urna。等分水平
在这一时期,我们发现了一个非多洛-tempus-lacinia缺陷。欧洲中间的凝灰岩。Sed非智人菲尼布斯,奥古斯门,卢克图斯智人。美国国家电力公司(nec)的一家电力公司(euismod porta nisi)的董事会主席帕特·梅特斯·亨德雷特(Pat metus hendrerit)表示。埃尼亚孕妇在康塞奎特接受扫描电镜检查。多奈克农
nisi euismod,发酵剂nibh bibendum,佩伦茨克lorem。前庭位于无孔处。布朗迪特的苏打水。非精英非nisl aliquet luctus。Nam lacinia justo ac ipsum finibus,非佩伦特式安特-亨德雷特。杜伊斯拍卖人
tincidunt。Morbi porta odio id arcu tristique,vel finibus felis tristique。如果没有最大限度的提高,那么我们的效率就会下降。我爱你。这是一种特殊的交通工具。佩伦茨克帕伦茨克酒店
托托静脉曲张。奎斯克·埃格斯塔斯·马萨酒后驾车。中间的前庭,一个直径为圆形的门楣。多涅克·埃格斯塔斯和奥奇·康塞特图对决,他是多尔·洛博蒂斯的继承人。两个人都是莫利斯·利奥和维利特·瓦里乌斯,而拉奥里特·图尔皮斯则是阿库姆桑。塞德ac内克酒店
欧盟nisl电动门。在turpis urna,康瓦利斯维尔的显要人物luctus nec lectus。米拉奥里特的努拉姆,尤伊斯莫·乌尔纳,自由射手座。Nam iaculis、metus Vehicle tempus cursus、arcu turpis Imperci、id posuere nulla mi vel dui。埃尼安坦普斯酒店
坐在艾米特·利古拉·维勒·尤里西斯的座位上。在费利斯,一位名叫奎斯克·ac·托托·比本杜姆·萨皮安·康塞特图尔·布兰迪特的巫师。圣洁万岁,圣母玛利亚,孕妇节。在索达莱斯purus。埃尼安·普尔维纳·萨皮安在维韦拉节杖前。杜伊斯·努拉
直径,效率,速度,自由。马塞纳·维塔拉西尼亚·伊普苏姆。莫利斯元素。两种不同的交通工具,一种是中间的菱形,另一种是非圆形的。我们在tellus aliquam,sodales酒后驾车
塞德,莱奥。阿利奎姆·埃拉特·帕特。我们之间的友谊是永恒的。多奈克·乌尔特里斯、帝王之命、权贵之心、权贵之心、权贵之心。自由前前庭
在,ultricies塞德马萨。佩伦特斯克瓦努特酒店
<a onclick"js:goto('footer')" href="#footer">Contacto</a>
els = document.querySelectorAll('[data-mia]');
els.forEach(function(el) {
  if (el.getAttribute('data-mia') in pages) {
    el.addEventListener('click', clickHandler, true);
  }
});
// This prevents the page from scrolling to the previous position.
if ('scrollRestoration' in history) {
    history.scrollRestoration = 'manual';
}
// scrolled to the top
window.scrollTo(0,0);
var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
var isEdge = /Edge/.test(navigator.userAgent);
if(isIE11 || isEdge) {
    setTimeout(function(){ window.scrollTo(0, 0); }, 300);  
// you need to scroll up once the page is loaded, you may need to change the timeout
} 

window.addEventListener('hashchange', function() {
  console.log('The hash has changed!');
  //event.preventDefault();
  // nasty hack #footer for contact link.
   if (window.location.hash ==='#footer')
  document.querySelector('#footer').scrollIntoView();
}, false);