Javascript 如何检测访问者是否仍在网站上(除了轮询)?
是否有一种简单的方法可以检测访问者是否仍在查看不需要每隔X秒轮询服务器的网页 如果服务器上有一些不那么麻烦的东西,那将是理想的。使用 反向Ajax指的是Ajax设计 使用长寿命HTTP的模式 连接以实现低延迟 web服务器与服务器之间的通信 浏览器。基本上,这是一种 将数据从客户端发送到服务器和 推送服务器数据的机制 返回浏览器 在web开发中,Comet是一种 描述网络的新词 应用程序模型,其中 HTTP请求允许web服务器 将数据推送到浏览器,而不使用 浏览器显式请求它。 彗星是多个行星的总称 实现这一目标的技术 相互作用所有这些方法都依赖于 默认情况下包含在中的功能 浏览器,如JavaScript,而不是 而不是非默认插件Javascript 如何检测访问者是否仍在网站上(除了轮询)?,javascript,html,Javascript,Html,是否有一种简单的方法可以检测访问者是否仍在查看不需要每隔X秒轮询服务器的网页 如果服务器上有一些不那么麻烦的东西,那将是理想的。使用 反向Ajax指的是Ajax设计 使用长寿命HTTP的模式 连接以实现低延迟 web服务器与服务器之间的通信 浏览器。基本上,这是一种 将数据从客户端发送到服务器和 推送服务器数据的机制 返回浏览器 在web开发中,Comet是一种 描述网络的新词 应用程序模型,其中 HTTP请求允许web服务器 将数据推送到浏览器,而不使用 浏览器显式请求它。 彗星是多个行星
您可以使用javascript on_exit事件触发ajax事件,打开带有跟踪器的弹出窗口,或者执行其他类似操作。只有当用户点击离开页面,而不是关闭窗口时,这些方法才有效。其他答案中提出的技术解决方案就其本身而言是不错的,但我想知道它们对根本问题的回答有多好 现在,我打开了4个Safari窗口,总共有17个选项卡;还有一个镀铬护目镜,有4个标签。我不清楚为什么我目前没有打开任何Firefox(可能只是最近升级到3.5.4后忘记重新启动),但通常会有2-3个窗口,还有8-10个选项卡。我是否“仍在浏览”这30多个网页——同时。。。?从技术上讲,我想你会发现每一个基于编程的解决方案都会说,为什么,是的,我当然是。。。这对你有意义吗 在现实生活中,我可能(也许,除非我在电脑上再次做其他事情)在给定的时间查看其中一个网页——如果我有多个或非常大的屏幕,可能是2-3个,但一般来说,1是现实生活中明智的答案。哪一个?如果没有强大的Javascript魔力,你是不会发现的 这是一个非常困难的问题,添加而不是的奇怪约束,让神奇的Javascript周期性地告诉服务器“我仍然打开,看起来用户正在查看我[[在过去XX秒内发生了一些交互,或者…]”vs“我是打开的,但我怀疑我在后台,或者用户离开去吃午饭,让浏览器保持打开状态,因为从YYY秒前开始就没有任何交互”vs“我正在被导航离开”(没有消息表示整个浏览器崩溃或其他情况)--加上奇怪的约束,基本上保证了问题是完全无法解决的
如果你真的关心用户是否真的在查看页面,那么每隔几秒钟就有一次从Javascript到服务器的定期Ajax交互只需付出很小的代价,而且实际上你的问题最少。如果你不真正关心,那当然不一样了。也许可以告诉我们你遇到了什么实际问题e真的想解决问题吗?最简单的方法(也是流量最轻的方法)是跟踪页面上的鼠标移动/按键事件。比如说,在上次移动鼠标后的1分钟内,你可以确定用户确实在网站上做了什么(例如,没有在午餐时打开窗口).那么你是说,当窗口关闭时,服务器会立即注意到缺少HTTP连接?反向AJAX连接是否必须轮询服务器以保持连接打开?如果是,它不能完全回答问题…我有一个LAMP堆栈。使用LAMP是否可以反向AJAX?(假设有大量访问者)太好了!我如何设置一个页面来执行反向AJAX或COMET?我之前一直避免使用它,因为我认为Apache在访问了几百个访问者之后会感到紧张。另外,反向AJAX和COMET是一样的吗?@chris:请记住,虽然它提供的压力比完全加载页面要小,但COMET技术仍然会使用套接字和reso通过定期为每个打开的页面轮询一个keepalive信号来在服务器上搜索资源。这是针对社交网络的,因此了解此人当前是否“可用”很重要“@chris,因此,网页是否仍在某个被遗忘已久的标签中打开,在一个深埋的窗口中,这并不是真正有意义的——因此,你确实需要JS magic Wannab,因此,不可避免地,JS会定期或根据需要向服务器发送状态更新(服务器必须注意,JS上次发送状态更新是在多长时间之前)“用户在此页面上实际处于活动状态”状态更新)。