我只是想知道为什么这不适用于IE。它适用于Chrome和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);
}
答案 0 :(得分:1)
你怎么能说它不起作用?
通常, beforeunload 事件,卸载事件和实际页面退出之间的时间很短。在页面卸载时,所有正在运行的脚本都被删除(浏览器比关闭窗口或导航到用户提供的地址)。
这里可能发生的事情是浏览器在卸载页面之前没有时间发送ajax请求。
在页面卸载完成之前,我已经看到了几种确保最终请求的方法。其中一个是发送请求,然后引入运行X个毫秒的循环,推迟卸载事件并确保完成ajax请求。
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) {};
}
答案 1 :(得分:1)
问题是您使用GET而不是POST请求。浏览器可以使用来自第一个请求的缓存结果。
这解释了“它只在我第一次打开IE时才起作用”的事实,就像回复另一个答案一样。
顺便说一下,onunload
中的AJAX调用似乎只在你使用async = false
中的参数XMLHttpRequest.open(...)
时才能在IE10中可靠地工作。