2

我目前(很高兴)使用 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

4 回答 4

9

我得出的解决方案是将两者绑定onpopstate并绑定onhashchange到所需的处理程序。

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

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

当我对页面进行 ajax 更改时,我正在使用 History jquery 库来更新 url。不幸的是,可以预见的是,IE 还没有赶上,似乎没有办法用 JS 更改 url。历史回退到在 IE 中更新 url 的哈希状态,因此这符合我将 url 状态更改绑定到 IE 中的处理程序的初始目标。

当然,这打开了另一个蠕虫罐,因为我现在必须同时处理 url 更改和哈希更改。嗯,就这样吧……

编辑: 正如@linus 指出的那样,我们应该是慈善的,避免浏览器检测给 IE 一个改革的机会。

于 2012-07-13T15:34:16.987 回答
3

我宁愿这样做:

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

因此,如果“msie”添加此功能,您就不必依赖旧代码

于 2014-09-26T08:53:22.357 回答
1

我在一个使用jQuery 历史插件的项目中,版权归 Takayuki Miwa 所有。客户端代码使用$.history.init(callback, ...).
每次您导航到/刷新页面时,以及每次通过 AJAX 更新页面内容时都会调用该回调,无论是点击、历史回溯、历史前进。

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

如果您使用的是来自 BA Lupton插件的更新的History.jsstatechange ,则可以绑定一个事件。

另外,请记住,onhashchangeIE8“仅”支持 even。
高温高压

于 2012-09-06T13:37:45.953 回答
0

这解决了我:

if(navigator.userAgent.toLowerCase().indexOf('msie')) window.onhashchange = locate else window.onpopstate = locate

于 2014-08-09T18:59:27.093 回答