it-swarm.com.de

Besuchernutzung von "Strg + F" auf einer Website verfolgen?

Wäre es theoretisch möglich zu erkennen (z. B. über JavaScript), ob ein Benutzer eine Webseite mit der Windows-Verknüpfung abfragt Ctrl + Foder das Mac-Äquivalent Command + F in ihrem Browser?

Der erste Schritt wäre zu erkennen, ob diese Funktion aufgerufen wurde, aber es wäre ein anderes Ballspiel, um ihre Tastenanschläge zu verfolgen ...


Ich frage, weil Web-Apps häufig Tastenkombinationen neu verknüpfen, um andere Aufgaben auszuführen (oder sie werden vollständig deaktiviert, z. B. in einigen Fällen von HTML5 canvas, der Verknüpfung Command + W Das Schließen der Registerkarte funktioniert nicht. Dies ist wahrscheinlich ein anderer Mechanismus, und ich habe keine großen Hoffnungen. Darüber hinaus können nur ca. 10% der Benutzer die Ctrl + F funktionieren sowieso.

7
Baumr

Wenn Sie die Ereignistastatur erfassen möchten Ctrl + F und fahren Sie mit dem Öffnen des Standardsuchfelds des Browsers fort, Sie könnten dies tun:

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);

Dies ist ein Live-Beispiel .

Wie Sie im Beispiel sehen können, sendet die Ereignisfunktion beim Drücken der rechten Tastenkombination einen "log string" in der Konsole ("EVENT INTO FUNCTION"), während der Status eines Flags geändert wird (isNewSearchEvent ).

Dieses Flag wird in einem Timer ausgewertet, um einen weiteren "log string" in der Konsole zu senden ("AUSSERHALB DER EREIGNISFUNKTION").

und öffnen Sie eine Warnung mit der gleichen Nachricht.

log console

Diese doppelte Passage ist notwendig, da keine Unterbrechungen in der Ereignisfunktion erzeugt werden können, die mit der richtigen Erfassungsgeschwindigkeit abhören sollten.

3
RTOSkit

Ja es ist möglich:

$(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;

    }
  });
});

Und mit .preventDefault() brechen wir das reguläre Ereignis ab. Aber für die Befehlstaste bin ich mir nicht sicher, was es ist. Einige sagen, dass es e.metaKey ist, wenn Sie jQuery verwenden, weil das Problem ist, dass die Befehlstaste nicht in jedem Browser den gleichen JavaScript-Schlüsselcode hat. Sie müssen es also manuell handhaben, oder jQuery kann Ihnen helfen.

Wenn Sie es testen möchten http://jsfiddle.net/a5t2q/

BEARBEITEN: Sie müssen auf den Bereich "Ergebnis" klicken, um zu sehen, dass Strg + F gesperrt ist, da dieser Bereich in diesem Fall als "Dokument" bezeichnet wird.

4
user1455261