我可以使用onpopstate与IE浏览器?(Can I use onpopstate with I

2019-09-18 15:31发布

我目前(愉快地)使用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发挥好不知何故?

Answer 1:

我在已经抵达该解决方案是两者结合onpopstateonhashchange到所需的处理程序。

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

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

我使用的是历史jQuery库为我做的网页AJAX的变化来更新网址。 不幸的是,和预见的是,IE还没有迎头赶上,似乎是没有办法改变与JS的URL。 历史回落到IE更新网址的哈希值的状态,所以这成为我的绑定URL状态变化到IE处理程序的初始目标。

当然,这开辟了蠕虫的另一行,因为我现在要同时处理的URL变化和哈希值发生变化。 不错啊,如此这般...

编辑:作为@linus指出的,我们应该是慈善,避免浏览器检测给IE改革的机会。



Answer 2:

我宁愿做这样的:

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

因此,如果“MSIE”添加此功能,您不依赖于旧代码



Answer 3:

我在使用的jQuery插件史上的一个项目,通过三轮孝之受版权保护。 客户端代码初始化与库$.history.init(callback, ...)
该回调在每次您导航到/刷新页面,通过AJAX实现了每个页面内容进行更新时调用,而且,无论是点击,还历史,历史前进。

如果您使用的是同一个库,你可以做同样以拥有的代码调用时,页面内容的变化,从而丢弃onpopstate / onhashchange事情。

如果您使用的是最近从BA普顿History.js插件,有一个statechange可以绑定到事件。

另外,要记住,即使onhashchange是“唯一”从IE8的支持。
HTH



Answer 4:

这解决了我:

如果(navigator.userAgent.toLowerCase()。的indexOf( 'MSIE'))window.onhashchange =定位否则window.onpopstate =定位



文章来源: Can I use onpopstate with IE?