簡體   English   中英

是否有任何 javascript 庫來捕獲鼠標/鍵盤事件並將它們發送到外部服務器?

[英]Is there any javascript library to capture mouse/keyboards events and send them to external server?

我需要的是:

  • 可以捕捉所有鍵盤事件
  • 可以捕捉所有鼠標事件(點擊、移動)
  • 可以捕捉頁面滾動,可能會考慮瀏覽器的差異
  • 使用 JSONP(或其他任何東西,但不僅需要在最新的瀏覽器中工作)將數據發送到外部服務器
  • 很小,我希望最多 xx kB

我想找到至少正確實施了上述 3 項的東西。 我也可以看看像 Dojo 或 JQuery 這樣的 js 框架,如果它們可以幫助我的話,但是我能不能讓它足夠小?

自己寫怎么樣? :) 讓我們考慮這個簡單的 jquery 代碼:

把它放在你的 <head>

    <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

    <script type="text/javascript">
        $(document).ready(function(){
            $('html').mousemove(function(event){
                console.log("mouse move X:"+event.pageX+" Y:"+event.pageY);
            });
            $('html').click(function(event){
                console.log("mouse click X:"+event.pageX+" Y:"+event.pageY);
            });
            $('html').keyup(function(event){
                console.log("keyboard event: key pressed "+event.keyCode);
            });
        });
    </script>

如果您轉到 Firefox firebug 或 IE/Chrome 開發人員工具/javascript 控制台,您將看到所有值。 您需要使用您需要的數據實現簡單的事件對象,以及每隔幾秒發布一次收集數據的機制(使用 jquery post 或 ajax 方法和 JSON 對象)

總結:

  • 所有鍵盤事件? 是(按鍵)
  • 鼠標移動和點擊 ? 是的
  • 可以捕捉頁面滾動嗎? 可行的
  • 可能會考慮瀏覽器的差異 - 這是 jquery 的主要目標
  • 使用 JSONP 將數據發送到外部服務器? 確定只使用 $.ajax 或 $.post
  • 非常小,我希望最多 xx kB - jquery 本身大約是 31kb minfied/gzipped

它不是防彈的,您需要服務器部分(簡單的 php/asp.net mvc 頁面來反序列化 json 並將其存儲到 db/xml 中,無論您需要什么),您就可以開始了:)

根據下面關於批處理數據的評論 - 很好的觀點。 將 .mousemove 事件更改為:

            $('html').mousemove(function(event){
                console.log("mouse move X:"+event.pageX+" Y:"+event.pageY);
                var color = 'red';
                var size = '2px';
                $("body").append(
                    $('<div></div>')
                        .css('position', 'absolute')
                        .css('top', event.pageY + 'px')
                        .css('left', event.pageX + 'px')
                        .css('width', size)
                        .css('height', size)
                        .css('background-color', color)
                );
            });

將更容易想象它將有多少數據 - 每個點都是到遠程服務器的單個 POST

在使用 RXJS 的情況下,你可以用更優雅的方式來完成。

import { fromEvent, merge } from "rxjs";
import { debounceTime } from "rxjs/operators";

merge(
  fromEvent(document, "keyup"),
  fromEvent(document, "mousemove")
).pipe(debounceTime(1000))
  .subscribe(response => {
    console.log(response);
});

我知道這個問題很老了。 只是想用 RXJS 方法添加一個答案。

這個問題聽起來像一個XY 問題 我認為您實際上正在尋找一個系統,該系統允許您在網絡瀏覽器上記錄用戶事件並報告這些事件。 通常,此類功能不作為部分產品存在,而是作為完整解決方案存在。 我所知道的唯一能夠進行此類跟蹤並提供報告的解決方案是Adobe Omniture (根據個人經驗)。 在撰寫本文時,該網站似乎已關閉,真是太糟糕了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM