我目前(很高兴)使用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以某种方式发挥出色?
答案 0 :(得分:8)
我遇到的解决方案是将onpopstate
和onhashchange
绑定到所需的处理程序。
// 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