【问题标题】:Capturing mouse actions捕捉鼠标动作
【发布时间】:2014-01-24 18:28:34
【问题描述】:

首先,一些背景:

我需要开发一个网络应用程序,它将在后台收集用户的所有鼠标操作(在访问网页期间),将它们以适当的格式存储在一个文件中,而不是有一个单独的回放应用程序输入该文件,并会产生如下内容:

曲线是鼠标移动,圆圈是点击或保持静止。

我或多或少有回放应用的解决方案。

我需要一个捕获用户鼠标操作并将其保存在服务器上的文件中的解决方案。

每个用户都应该有单独的文件。文件的格式没有预先确定,但以下是合理的:

<timestamp1> MOVE TO <x1>, <y1>
<timestamp2> MOVE TO <x2>, <y2>
<timestamp3> MOVE TO <x3>, <y3>
<timestamp4> CLICK
<timestamp5> RIGHT-CLICK
<timestamp6> MOVE TO <x6>, <y6>
<timestamp7> MOVE TO <x7>, <y7>

我想知道您是否可以帮助我了解如何设计和实现这种鼠标动作捕捉。一切顺利。

【问题讨论】:

  • 如果你打算用javascript收集点击数据,那真的很容易。只需将事件侦听器附加到窗口或文档,然后为此编写一个日志记录函数。
  • @zfor,感谢您的评论。看,这就是我的困境开始的地方。我目前的愿景如下:1)用户打开一个网页;在服务器上创建一个文件,稍后可以通过特殊的文件名/会话 ID 识别该文件 2) 用户在页面上播放,并且在每次鼠标操作时,都会向服务器发送一些内容,然后将其记录在适当的文件中。 JavaScript 可以主要在客户端发挥作用,甚至可能在服务器端(节点)发挥作用。
  • @VividD 这是什么隐私侵犯:O
  • @Markasoftware 你在现实中拥有的东西,今天,每一天,每一个地方,比这更糟糕。
  • 如果你正在重新发明轮子,openwebanalytics.comsmt.speedzinemedia.com/features.php

标签: javascript web-applications mouse user-activity


【解决方案1】:

您可以使用clickmousemove等事件轻松捕获鼠标动作,在您提到的cmets中您知道如何执行此操作,因此我不会详细说明。

您不能直接在服务器上“打开”文件,因为代码是在完全不同的机器(即客户端)上执行的,所以您需要做的是将数据从客户端发送到服务器每秒或每隔几秒。

有几种方法可以做到这一点,这里有一种方法:

  1. 检查(并获取)来自document.cookielocalStorage 的唯一用户ID,如果没有,则生成一个(使用Date() 和/或Math.random()

  2. 绑定事件来捕捉鼠标动作,这些事件将数据(以你想要的格式)写入数组window.captureMouse

  3. 每秒向服务器发送一个 Ajax 请求(取决于用户数量、服务器速度,您可能需要更改间隔)。

一段示例代码可能更好地说明这个想法(使用 jQuery)

userId = fetchOrSetUserId()   // Make this function

captureMouse = []
$('#id').on('click', function(e) {
    captureMouse.push({
        event: 'click',
        target: $(this).attr('id'),
    })
})

// ... more events ...

sendData = function() {
    // You probably need to do locking here, since captureMouse may be changed in an event before it's reset
    send = captureMouse
    captureMouse = []

   jQuery.ajax({
       url: '/store-data',
       type: 'post',
       data: {
           userId: userId,
           captureMouse: JSON.stringify(send)
       },
       success: function() {
           // Once this request is complete, run it again in a second ... It keeps sending data until the page is closed
           setTimeout(sendData, 1000)
       }
   })
}

// Start sending data
sendData()

在您的服务器上,您将获得 captureMouse 作为 POST,您需要解码 JSON 并将其附加到文件(使用 userId 参数标识)。

【讨论】:

  • 多谢回复,我去详细看看,第一眼看起来很酷!!
  • 是的,看起来这就是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
相关资源
最近更新 更多