我目前(愉快地)使用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发挥好不知何故?
我在已经抵达该解决方案是两者结合onpopstate
和onhashchange
到所需的处理程序。
// 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改革的机会。
我宁愿做这样的:
if (window.onpopstate != undefined) {
window.onpopstate = locate;
} else {
window.onhashchange = locate;
}
因此,如果“MSIE”添加此功能,您不依赖于旧代码
我在使用的jQuery插件史上的一个项目,通过三轮孝之受版权保护。 客户端代码初始化与库$.history.init(callback, ...)
该回调在每次您导航到/刷新页面,通过AJAX实现了每个页面内容进行更新时调用,而且,无论是点击,还历史,历史前进。
如果您使用的是同一个库,你可以做同样以拥有的代码调用时,页面内容的变化,从而丢弃onpopstate / onhashchange事情。
如果您使用的是最近从BA普顿History.js插件,有一个statechange
可以绑定到事件。
另外,要记住,即使onhashchange
是“唯一”从IE8的支持。
HTH
这解决了我:
如果(navigator.userAgent.toLowerCase()。的indexOf( 'MSIE'))window.onhashchange =定位否则window.onpopstate =定位