是否有一种简单的方法可以检测访问者是否仍然在网页上查看不需要每隔X秒轮询一次服务器的页面?
如果服务器上的负担较少,那将是理想的。
答案 0 :(得分:4)
其他答案中提出的技术解决方案很好,只要他们去,但我想知道他们如何回答底层问题。
现在,我打开了4个Safari窗口,共有17个标签页;和Goggle Chrome一个,有4个标签。不确定为什么我目前没有任何Firefox打开(可能只是忘了在最近升级到3.5.4后重新启动它)但通常会有2-3个窗口,另有8-10个选项卡。我是否“仍在观看”这30个左右的网页 - 同时......?从技术上讲,我猜你会发现每个基于编程的解决方案都会说,为什么,是的,我当然是......这对你有意义吗?!
在现实生活中,我可能(也许,除非我在计算机上再做一些其他事情)在给定时间查看其中一个网页 - 如果我有多个或非常大的屏幕,可能是2-3个,但一般来说,1是现实生活中明智的答案。哪一个?如果没有实质性的Javascript魔法,你就不会发现 - 如果那么。
这是一个很难的问题,添加奇怪的约束不有神奇的Javascript定期告诉服务器“我仍然打开,看起来用户正在查看我[[一些互动]已经发生在最后的XX秒内,或者......]]“vs”我打开但是我怀疑我在后台或者用户已经离开去吃午餐让浏览器打开,因为之后没有任何交互YYY秒前“vs”我正在被导航离开“(并且没有消息意味着整个浏览器崩溃或其他东西) - 添加奇怪的约束基本上确保问题完全不可解决。
如果您真正关心关于用户是否实际正在查看该页面,那么从Javascript到服务器的定期每隔几秒Ajax交互是一个微不足道的价格支付,而且至少你的问题。如果你没有真正关心,那当然是不同的。也许告诉我们你真正试图解决的问题解决 ......?!
答案 1 :(得分:2)
使用
反向Ajax是指Ajax设计 使用长期HTTP的模式 连接以实现低延迟 Web服务器和Web服务器之间的通信 一个浏览器。基本上它是一种方式 从客户端向服务器发送数据 推送服务器数据的机制 回到浏览器。
在网络开发中,Comet是一个 描述网络的新词 应用模型中长期持有 HTTP请求允许Web服务器 将数据推送到浏览器,没有 浏览器明确请求它。 彗星是多重的总称 实现这一目标的技术 相互作用。所有这些方法都依赖于 默认包含的功能 浏览器,比如JavaScript 比非默认插件。
答案 2 :(得分:1)
您可以使用javascript on_exit事件触发ajax事件,使用跟踪器打开弹出窗口,或执行其他类似操作。这些只有在用户点击页面时才有效,而不是关闭窗口。
答案 3 :(得分:1)
最简单(并且在流量方面最轻量级)将是跟踪页面上的mousemove / keyup事件。在鼠标上次移动1分钟之内,您可以确定用户实际上正在网站上做某事(而不是例如去午餐时打开窗户)。