【问题标题】:Can I use onpopstate with IE?我可以在 IE 中使用 onpopstate 吗?
【发布时间】:2014-09-27 01:14:11
【问题描述】:

我目前(很高兴)使用 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 以某种方式运行良好?

【问题讨论】:

  • 我认为pushStatereplaceState 函数可以触发此事件。你预计 IE 什么时候会触发这个事件?
  • pushState / onpopstate 在 IE
  • @Václav:我正在使用 History jquery 库来更新新 ajax 页面加载时的 url。我的目标是在 url 更改时触发 ajax 页面加载事件,以便用户在单击后退按钮时可以返回到上一个 ajax '页面'。

标签: internet-explorer browser-history


【解决方案1】:

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

    // 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 一个改革的机会。

【讨论】:

    【解决方案2】:

    我更愿意这样做:

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

    所以如果“msie”添加了这个功能,你就不用依赖旧代码了

    【讨论】:

    • 其实应该是window.onpopstate !== undefined
    【解决方案3】:

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

    如果您使用的是同一个库,您可以这样做以便在页面内容更改时调用代码,从而删除 onpopstate/onhashchange 事情。

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

    另外,请记住,即使是 onhashchange 也“仅”支持 IE8。
    高温

    【讨论】:

      【解决方案4】:

      这解决了我:

      if(navigator.userAgent.toLowerCase().indexOf('msie')) window.onhashchange = 定位 别的 window.onpopstate = 定位

      【讨论】:

        猜你喜欢
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        • 2014-11-22
        • 2010-12-26
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多