Theo dõi khách truy cập sử dụng Ctrl Ctrl + F trên một trang web?


7

Về mặt lý thuyết có thể phát hiện (ví dụ: thông qua JavaScript) nếu người dùng truy vấn trang web bằng phím tắt Windows Ctrl+ Fhoặc Mac tương đương Command+ Ftrong trình duyệt của họ không?

Bước đầu tiên sẽ là phát hiện xem chức năng đó có được gọi hay không, nhưng đây sẽ là một trò chơi bóng khác để theo dõi tổ hợp phím của họ ...


Tôi đang hỏi bởi vì rất nhiều lần, các ứng dụng web dường như nối lại các phím tắt để làm những việc khác (hoặc chúng bị vô hiệu hóa hoàn toàn, ví dụ, trong một số trường hợp của HTML5 canvas, phím tắt Command+ Wđể đóng tab không công việc). Đây có thể là một cơ chế khác và tôi không có hy vọng cao. Hơn nữa, chỉ có khoảng 10% người dùng biết cách sử dụng chức năng Ctrl+ F.


1
"chỉ 10%" - nao núng!
MrWhite

@ w3d, bạn đang nói gì vậy?
Baumr

1
Chỉ cần bày tỏ sự ngạc nhiên của tôi rằng "chỉ có khoảng 10% người dùng [được báo cáo] biết cách sử dụng Ctrl + F". (lúng túng - "Như thể bị câm với sự ngạc nhiên và ngạc nhiên")
MrWhite

Không có ý định mỉa mai? ;)
Baumr

Tôi không có ý định mỉa mai, mặc dù phải thừa nhận rằng tôi thấy thống kê đó khá khó nuốt! :)
MrWhite

Câu trả lời:


3

Nếu bạn muốn chụp bàn phím sự kiện Ctrl+ Fvà tiếp tục mở hộp tìm kiếm tiêu chuẩn của trình duyệt, bạn có thể thực hiện việc này:

var KEY_CTRL = 17;
var KEY_f = 70;

var isReserved = false;
var useExclusiveKeyEvent = false;
var isNewSearchEvent = false;


/*THIS VARIABLE IS RENDERED BY SERVER SIDE*/
var clientRandomKey = "78349DE472AA30032DE2DF344FF28374";

window.onkeyup=function(ev){
  if(ev.which == KEY_CTRL){
    isReserved=false;
  }
}
window.onkeydown=function(ev){
  //!IMPORTANT NOT MAKE UI DELAY IN THIS FUCTION
  if(ev.which == KEY_CTRL) {
       isReserved=true;
  }
    if((isReserved==true)&&(ev.which == KEY_f)) {       
    var currentDate = new Date();
    console.log( "INTO EVENT FUNCTION >\n   "+ currentDate+ " \n   ID: "+clientRandomKey+"\n   launch search a word");
    isNewSearchEvent=true;
    if(useExclusiveKeyEvent){
      return false;}
    }
}

window.setInterval(function(){            
    if(isNewSearchEvent){
      isNewSearchEvent=false;
      //TODO ajax send code
      var currentDate = new Date();
      var msg = "OUTSIDE EVENT FUNCTION >\n   " + currentDate+ " \n   ID: "+clientRandomKey+"\n   launch search a word"
      console.log(msg);
      alert(msg);
    }
},2500);

Đây là một ví dụ sống .

Như bạn có thể thấy trong ví dụ, khi người dùng nhấn tổ hợp bàn phím bên phải, chức năng sự kiện sẽ gửi một "log string"bảng điều khiển ("SỰ KIỆN VÀO CHỨC NĂNG"), trong khi thay đổi trạng thái của cờ ( isNewSearchEvent).

Cờ này được đánh giá trong một bộ đếm thời gian để gửi một cái khác "log string"trong bảng điều khiển ("CHỨC NĂNG BÊN NGOÀI")

và mở một cảnh báo với cùng một thông điệp.

bảng điều khiển đăng nhập

Lối đi đôi này là cần thiết vì không thể tạo ra các ngắt trong chức năng sự kiện, nên nghe ở tốc độ bắt chính xác.


Hoàn hảo, cảm ơn! Rất thú vị. Vì vậy, sau này, nó có thể theo dõi tổ hợp phím?
Baumr

Chắc chắn, là một giải thích chính xác về các khả năng thực tế
RTOSkit

4

Vâng nó có thể:

$(document).ready(function(){
  ctrl = false;
  document.addEventListener("keydown", function(e){
    if(e.which == 17){
      ctrl = true;
    }
    if(e.which == 70 && ctrl == true){
      e.preventDefault();

    }
  }, true);

  document.addEventListener("keyup", function(e){
    if(e.which == 17){
      ctrl = false;

    }
  });
});

Và với .preventDefault()chúng tôi hủy bỏ sự kiện thường xuyên. Nhưng đối với khóa Command Tôi không chắc nó là gì, một số người nói rằng đó là e.metaKeynếu bạn đang sử dụng jQuery, vì vấn đề là khóa Command không có cùng mã JavaScript trên mỗi trình duyệt, vì vậy bạn phải xử lý nó thủ công hoặc jQuery có thể giúp bạn.

Nếu bạn muốn kiểm tra nó http://jsfiddle.net/a5t2q/

EDIT: Bạn phải nhấp vào phần "Kết quả" để thấy rằng Ctrl + F bị chặn, vì phần đó là phần được gọi là "tài liệu" trong trường hợp này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.