如何使用onopstate,使用纯JavaScript



我有一个网站,有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

相关内容

  • 没有找到相关文章

最新更新