onbeforeunload的使用Ajax不与IE浏览器 [英] onBeforeUnload with ajax does not work with IE

查看:75
本文介绍了onbeforeunload的使用Ajax不与IE浏览器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是想知道这是为什么不工作与IE浏览器。它正常工作与Chrome和Firefox浏览器。

  window.onbeforeunload =功能()
{
    取(HTTP://+ window.location.hostname +/process_sc.php?cC=+ 1);
}

函数取(URL){
    变种,X =(window.ActiveXObject)?新的ActiveXObject(Microsoft.XMLHTTP):新XMLHtt prequest();
    x.open(GET,网址,虚假);
    x.send(空);
}
 

解决方案

你怎么知道它是不是工作?

在一般情况下,还有的 beforeunload 的情况下,的卸载的事件和实际的网页退出之间的时间很少。在页面卸载所有正在运行的脚本被丢弃(浏览器不是关闭窗口或导航用户,例如所提供的地址)。

怎么可能发生在这里的浏览器并没有真正有时间来发送Ajax请求页面卸载之前。

我见过几个方法,以确保您的最终申请页面卸载过程才能完成。其中之一是发送请求,然后引入运行的毫秒的X个循环,推迟的卸载的事件,并确保Ajax请求就可以完成。

  window.onbeforeunload =功能(){
    取(HTTP://+ window.location.hostname +/process_sc.php?cC=+ 1);
    //这里我们强制浏览器在继续进行卸载之前需要等待300秒
    VAR T = Date.now()+ 300;
    而(Date.now()< T){};
}
 

I'm just wondering why this is not working with IE. It works fine with Chrome and Firefox.

    window.onbeforeunload = function()
{
    fetch("http://"+window.location.hostname+"/process_sc.php?cC=" + 1);
} 

function fetch(url) {
    var x = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
    x.open("GET", url, false);
    x.send(null);
}   

解决方案

How can you tell it isn't working?

In general, there's little time between beforeunload event, unload event and actual page exit. At page unload all running scripts are dropped (browser than closes the window or navigates to address provided by user for example).

What might be happening here is browser doesn't really have time to send ajax request before page is unloaded.

I've seen couple of ways to ensure your final request before page unload will be completed. One of them is sending request and then introducing loop that is running for X number of miliseconds, postponing unload event and ensuring ajax request can be completed.

window.onbeforeunload = function() {
    fetch("http://"+window.location.hostname+"/process_sc.php?cC=" + 1);
    // here we force browser to wait for 300 seconds before proceeding with unload
    var t = Date.now() + 300;
    while(Date.now() < t) {};
} 

这篇关于onbeforeunload的使用Ajax不与IE浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆