我可以在IE上使用onpopstate吗?

时间:2012-06-27 18:29:53

标签: internet-explorer browser-history

我目前(很高兴)使用jquery将ajax请求函数绑定到非IE浏览器中的window.onpopstate事件。但是,IE从未达到我的doAjax功能。

    // Bind a function to the popstate event to execute ajax requests
    // this allows request to occur on back/fwd browser navigation 
    window.onpopstate = doAjax;

任何人都知道是否有办法让IE 8/9以某种方式发挥出色?

4 个答案:

答案 0 :(得分:8)

我遇到的解决方案是将onpopstateonhashchange绑定到所需的处理程序。

    // Popstate: load ajax
    window.onpopstate = handlePageWipe;

    // And onhashchange for IE
    if( jQuery.browser.msie ) window.onhashchange = handlePageWipe;

我正在使用History jquery库更新url,因为我对页面进行了ajax更改。不幸的是,并且可以预见,IE还没有赶上,似乎没有办法改变JS的URL。历史可以追溯到在IE中更新url的哈希状态,所以这最初的目标是将url状态更改绑定到IE中的处理程序。

当然这会打开另一种蠕虫病毒,因为我现在必须处理网址更改和哈希更改。好吧,好吧......

修改 正如@linus指出的那样,我们应该慈善并避免浏览器检测,以便为IE提供改革的机会。

答案 1 :(得分:3)

我更愿意这样做:

if (window.onpopstate != undefined) {
    window.onpopstate = locate;
} else {
    window.onhashchange = locate;
}

所以,如果“msie”添加此功能,则不依赖于旧代码

答案 2 :(得分:1)

我正在使用 jQuery历史插件的项目,版权归Takayuki Miwa所有。客户端代码使用$.history.init(callback, ...)初始化库 每次导航到/刷新页面时都会调用该回调,并且每次通过AJAX更新页面内容时,无论是点击,历史记录还是历史记录,都会调用。

如果您使用的是相同的库,则可以执行相同的操作,以便在页面内容更改时调用代码,从而删除onpopstate / onhashchange事项。

如果您使用的是更新的History.js from B A Lupton插件,则可以绑定statechange个事件。

另外,请记住,IE8仅支持“onhashchange” HTH

答案 3 :(得分:0)

这解决了我:

if(navigator.userAgent.toLowerCase()。indexOf(' msie'))     window.onhashchange = locate 其他     window.onpopstate = locate