Javascript 在浏览器关闭时检测用于卸载/卸载前的刷新浏览器

Javascript 在浏览器关闭时检测用于卸载/卸载前的刷新浏览器,javascript,Javascript,这实际上是我上一篇文章的延续。我仍然面临这个问题,因为当我刷新浏览器时,卸载或beforeunload也会启动,我只希望在浏览器关闭时启动它们。我突然想到要使用window.outerHeight或window.innerHeight,但仍然不知道如何做到这一点。有什么建议/片段吗?提前谢谢 据我所知,不可能检测到浏览器关闭与浏览器刷新分开,因为浏览器不向网页(窗口)提供该信息。就您的页面及其Javascript代码而言,两者是一体的 因为它是你需要的浏览器信息,所以获取它的唯一方法是使用能够访

这实际上是我上一篇文章的延续。我仍然面临这个问题,因为当我刷新浏览器时,卸载或beforeunload也会启动,我只希望在浏览器关闭时启动它们。我突然想到要使用window.outerHeight或window.innerHeight,但仍然不知道如何做到这一点。有什么建议/片段吗?提前谢谢

据我所知,不可能检测到浏览器关闭与浏览器刷新分开,因为浏览器不向网页(窗口)提供该信息。就您的页面及其Javascript代码而言,两者是一体的


因为它是你需要的浏览器信息,所以获取它的唯一方法是使用能够访问该信息的东西,例如浏览器插件。但是,您需要为每个浏览器制作一个插件,并让每个用户安装它。由于我高度怀疑您是否会认为这是值得的,您的问题的真正答案(尽管可能令人沮丧)是:停止尝试检测刷新与关闭,然后继续。

就服务器或浏览器而言,“关闭”和“离开页面的导航”是同义词。@BradChristie:如果是同义词,则只有关闭浏览器时才有可能隔离“卸载/之前卸载”事件?假设正确。您可以捕获重新访问,因为服务器将有一个新的操作要执行,但是如果什么都没有发生,您就无法捕获该操作的缺席(关闭窗口)。这就是为什么网站使用“自上次访问以来经过的时间”来确定谁“仍然在线”。@BradChristie:那么,我如何区分刷新时卸载/之前卸载和关闭浏览器?或者你有什么建议来解决我的问题吗?@DoniAndriCahyono你无法区分它们。事实上,我刚刚意识到我所说的并不完全正确:你可以使用本地存储来跟踪上次页面加载的时间(
var localStorage.lastLoad=new Date()
),然后检查页面加载的时间;如果
new Date()
localStorage.lastLoad
足够接近,则可以推断发生了重新加载。但是,除非他们重新加载,否则这仍然不允许您对这些信息进行任何处理,所以这可能没有多大帮助。请您提供更准确的片段,好吗?我还是不明白你的意思。提前感谢,我的评论更像是一个旁白,试图尽可能真实准确;这不是一个真正的解决方案。它不会告诉你当有人离开你的页面时(即onBeforeUnload),他们是在重新加载、转到另一个页面还是完全关闭浏览器。它将告诉你的是,当页面第一次加载时,用户是刚刚刷新还是第一次访问页面(甚至只是猜测)。如果你想要这些信息(一些未来的读者可能会这样做),基本技术是:1)在“lastVisited”键下加载存储(使用cookie或
localStorage
)当前时间,2)在执行此操作之前,onLoad,检查cookie或localStore是否有“lastVisited”时间3)如果lastVisited时间距离当前时间不到X分钟(10?),则假设用户重新加载了页面。换句话说,编写一个JS函数“within!0Minutes”,告诉您两个日期之间的间隔是否在10分钟之内,然后onLoad do
if(使用intentminutes(new Date(),localStorage[“lastvisted”])doReloadStuff();else doFreshLoadStuff();localStorage['lastVisited']=新日期()