我有一个网站,有4个主页,index、somepage、someotherPage和LastOtherpage。它们有不同的名称,如index.php、food_and_health.php、lighting_info.php和about_us.php。
我的ajax部分(HTTPrequest)运行良好,pushstate也在运行。
很明显,我现在想要的是popstate函数工作。我已经阅读并观看了教程,但我该如何使用这个关键字呢?
我添加了一个fiddle,所以你可以看到我的代码,它在fiddle中工作不好,但在chrome、firefox和late-ie中工作得很好。我对自己的国家有这样的想法。。
nav.history("this.object", "Title", "/this.url");
http://jsfiddle.net/vwd6bnjc/1/
onopstate代码会是什么样子?我知道索取所有代码是不好的,但通过这种方式我实际上学到了,因为当我阅读代码时,我理解了它。我还没有完全掌握javascript事件处理,正如你所看到的,我在html文档中使用onclick,而不是事件处理。但我知道,我可以做到,这只是我的文档中的很多更改,对我来说,首要任务是让后退/前进、刷新和共享功能发挥作用,这样我就可以在没有或缺乏功能的情况下在网上共享我的网站了!:)
非常感谢任何帮助,提前感谢:)
如果MDN对您没有帮助,您可以查看history.js并将其用于跨浏览器,或者查看onPopState是如何使用的:
https://github.com/browserstate/history.js
我使用ajax的方式与您的建议类似。我利用了history.pushState()
状态对象。history对象不允许访问历史会话url(这是一个合理的安全风险)。我通过将请求的URL存储在state对象中来模拟这种效果。
我已经在jsfiddle上查看了您的示例,并将使用它作为参考。
我建议在function Mat(url)
中使用history.pushState
时,像这样将url
参数添加到状态对象中。
history.pushState({urlRequested:url}, 'Page Title');
最好记住,当使用pushState
方法并为第三个参数提供URL时,也会导致浏览器URL地址发生更改。因此,如果您刷新页面,您将请求更新的URL。如何处理这取决于您,但通过排除它,将使用当前文档位置。因此,如果刷新页面,则请求的页面将是相同的。
在提供状态对象之后,event.state
属性将具有可用于获取url的对象[urlRequested:url]
。
要做到这一点,你可以这样做。
window.addEventListener("popstate", function(event) {
if (event.state !== null) {
/**
* Here you can code what operations you want to accomplish
* when the event is called. If you would like you can use
* your function Mat( url )
*/
Mat(event.state['urlRequested']);
//this gets the value of urlRequested which is the URL
}
}, true);
当用户在两个历史条目之间导航时,会触发onpopstate
事件。当这种情况发生时,function Mat( url )
将传递存储在state
属性中的URL,并使用该URL发送ajax请求。
我当然希望这有助于回答你的问题。
MDN中的示例对您有帮助吗?你有机会看看吗?
https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate