2012-06-05 119 views
8

我试图在用户离开(关闭)浏览器或页面时运行一个函数,并且它已在除Chrome之外的所有浏览器中运行。当选项卡(或浏览器)关闭时,Chrome onbeforeunload事件

浏览器成功运行的功能,如果我从页面进行浏览,但不运行它,如果我关闭选项卡或完全关闭浏览器。

我在最后运行的函数会创建一个图像并将一些数据发送到我的服务器(类似于任何分析报告):img.src =“url?data = yyy”。这张图片是用js动态创建的。

有人可以解释一下问题可能是什么? 我已经把范围缩小到几个原因:

1)我没有使用正确的事件时,标签关闭(即不beforeunload)

2)Chrome的实际运行功能,但没有按图像因为浏览器/页面关闭而无法发送。

任何帮助表示赞赏。谢谢。

这里的示例代码:

if(window.addEventListener){ 
    window.addEventListener("beforeunload", page_unload, false);   
} 
function page_unload(){ 
    var img  = new Image(); 
    var img_src = "http://www.myurl.com?data=yyy" 
    img.src = img_src; 
} 
+0

每个chrome选项卡都运行在它自己的进程中吗?因此,如果你在tab关闭时运行了某些东西,即使它运行,包含运行代码的进程也会停止。否则,你可能会看到一堆悬挂的镀铬标签打开,这是我以前从未见过的。 –

+1

正确,每个标签都是它自己的过程。并且与该过程相关的任何代码也会结束,这是有道理的。 Firefox优雅地处理这种情况,并做我需要做的事情,我希望我错过了一些关于Chrome的事情 – Nik

+3

你想做的事情是不可能的。 'onbeforeunload'事件只能用于抛出一个对话框来鼓励用户留在你的页面上(通过返回文本来提示用户) - 当事件触发时,你没有任何时间留下来发出HTTP请求。 – duskwuff

回答

0

我有Chrome存在的相关问题,并使用jQuery解决了这个问题:

$(window).unload(function() { 
    //Call your function 
    page_unload(); 
}); 

出于某种原因,jQuery的卸载事件更好地工作在Chrome在某些情况下, JavaScript beforeunload无法正常工作。

+0

不适用于我 – TMS

相关问题