javascript - 如何检测访问者是否仍在网站上(轮询除外)?

标签 javascript html

有没有一种简单的方法可以检测访问者是否仍在浏览网页上的页面,而不需要每隔 X 秒轮询一次服务器?

如果服务器上的负担较小,那将是理想的。

最佳答案

就目前而言,其他答案中提出的技术解决方案很好,但我想知道他们对潜在问题的回答如何。

现在,我打开了 4 个 Safari 窗口,总共有 17 个选项卡;还有一个 Goggle Chrome 浏览器,有 4 个标签。不确定为什么我目前没有打开任何 Firefox(可能只是在最近升级到 3.5.4 后忘记重新启动它)但通常会有 2-3 个窗口和另外 8-10 个选项卡。我是否“仍在查看”这 30 个左右的网页——同时……?从技术上讲,我猜你会发现的每一个基于编程的解决方案都会说,为什么,是的,我当然是......这对你有任何意义吗?!

在现实生活中,我可能(也许,除非我再次在我的计算机上做其他事情)在给定时间查看其中一个网页——如果我有多个或非常大的屏幕,可能会查看 2-3 个,但一般来说,1 是现实生活中明智的答案。哪一个?如果没有大量的 Javascript 魔法,您将无法找到答案——如果那样的话。

这是一个非常困难的问题,添加的怪异约束会定期告诉服务器“我仍然打开并且看起来用户正在查看我[[一些交互在最后 XX 秒内发生,或者...]]"vs "我打开但我怀疑我在后台或者用户离开去吃午饭而让浏览器打开,因为自那以后没有交互YYY 秒前”与“我正在离开”(没有消息意味着整个浏览器崩溃或其他)——添加奇怪的约束基本上确保问题完全无法解决。

如果您真的关心用户是否真的在查看页面,那么从 Javascript 返回服务器的周期性每隔几秒的 Ajax 交互是一个微不足道的代价付钱,真的是你问题最少的。如果你真的不在乎,那当然是不同的。也许告诉我们您真正想解决的实际问题是什么...?!

关于javascript - 如何检测访问者是否仍在网站上(轮询除外)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641672/

相关文章:

javascript - 如何使用打开 vue-js 模式的可点击组件在 vue-js 中创建 TreeView ?

javascript - jQuery 微醉 : Dynamically update title

javascript - 访问链接后 html 链接悬停不起作用?

javascript - 如何使用Ajax将图像存储到文件夹并存储数据库路径?

javascript - Input type FILE multiple - 按顺序添加文件

javascript - 在 Node 中使用 firebase 时出现错误 "Cannot read property ' uid' of null”?

javascript - 如何在不使 Chrome 崩溃的情况下显示长文本?

javascript - 打印链接时调用 javascript 函数

javascript - 通过 HTML 标签进行 XPath 搜索

HTML 和 CSS 拆分输入表单 - 一个字符一个字符地拆分