【发布时间】:2012-06-09 20:29:27
【问题描述】:
我正在尝试在用户离开(关闭)浏览器或页面时运行一个函数,并且我已经让它在除 Chrome 之外的所有浏览器中运行。
如果我离开页面,Chrome 会成功运行该功能,但如果我关闭选项卡或完全关闭浏览器,则不会运行该功能。
我最后运行的函数会创建一个图像并将一些数据发送到我的服务器(类似于任何分析报告)示例: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;
}
【问题讨论】:
-
每个 chrome 选项卡都在自己的进程中运行,对吗?因此,如果您在 tab close 上运行了某些东西,即使它运行了,包含正在运行的代码的进程也会停止。否则你可能会看到一堆挂着的镀铬标签打开,这是我以前从未见过的。
-
对,每个选项卡都是它自己的进程..与该进程关联的任何代码也会结束是有意义的。 Firefox 优雅地处理了这种情况并做了我需要它做的事情,所以我希望我错过了一些关于 chrome 的东西
-
您尝试做的事情是不可能的。
onbeforeunload事件实际上只能用来抛出一个对话框来鼓励用户留在你的页面上(通过返回文本来提示用户)——当事件触发时,你没有任何时间留下一个 HTTP 请求。 -
hmmm 很公平....你知道为什么 firefox 在这种情况下可以工作而其他人不能吗?它只是困扰我,一个会工作,另一个不会......
-
我推测,因为进程不会死,Firefox 更优雅地处理选项卡关闭。在这种情况下,优雅是复杂的代名词。
标签: javascript google-chrome onbeforeunload