Erkennen, wenn Sie den Knopf klicken Sie auf real-user oder ausgelöst durch ein Skript
Gibt es eine Methode, die es mir ermöglicht, zu erkennen, ob das klicken auf eine Schaltfläche ausgeführt wurde-von einem echten Benutzer und nicht eine automatisierte Methode (javascript), dass ein Benutzer geladen ist, auf Ihrem browser die Entwickler-Konsole oder andere browser-Entwickler-tool?
Ich habe versucht, die folgenden Methoden vorgeschlagen, die in verschiedenen stackoverflow-posts, aber keiner von Ihnen scheint zu arbeiten.
REF: Wie zu erkennen, wenn ein klicken Sie auf() ist ein Mausklick oder ausgelöst durch irgendeinen code?
Skript-Detection-Methoden versucht und sind gescheitert:
mybutton.click(function (e) {
if (!e.which) {
//Triggered by code NOT Actually clicked
alert(' e.which - not a real button click')
} else if ('isTrusted' in e && !e.isTrsuted) {
//Triggered by code NOT Actually clicked
alert(' e.isTrusted - not a real button click')
} else if (e.originalEvent === undefined) {
//Triggered by code NOT Actually clicked
alert(' e.originalEvent - not a realbutton click')
}
// else if (!e.focus) {
// //triggered //does not detect e.focus on a real btn click
// alert(' e.focus - not a realbutton click')
// }
else {
//Button hopefully clicked by a real user and not a script
}
})
Wenn ich führen Sie das folgende Skript zum auslösen der Schaltfläche wählen Sie aus dem Chrome-browser-Konsole keine der oben genannten Methoden fallen als, ausgelöst durch ein Skript.
var button = document.getElementById("btnSubmit");
button.click();
==========================================================================
Danke für alle Antworten und danke an stackoverflow für die Bereitstellung solcher eine große Website, die so viel wissen zu teilen und für das speichern von uns Technik-Freaks eine ungezählte Anzahl von Stunden.
Scheint es, dass ich immer noch keine zuverlässige Methode. Allen 3 Browsern (FF, IE & Chrome) bieten eine Entwickler - /Konsolen-interfaces für einen Benutzer zu laufen/Spritzen, ein javascript auf meiner Webseite. Es scheint, dass jeder browser, der Geschmack fallen einige Ereignis-Eigenschaft-Werte ein wenig anders. Zum Beispiel: Chrom-traps der Unterschied zwischen einem Skript aktiviert klicken und ein echter Benutzer mit e.screenX aber im IE: e.screenX hat den gleichen Wert für beide ein Skript auf (synthetische) und eine user-Taste, klicken Sie auf
Folgende Nachweismethoden, die entweder nicht arbeiten oder sind inkonsistent in den verschiedenen Browsern: e.die e ist.isTrsuted e.originalEvent (event.Quelle != Fenster) (e.Abstand != null)
Das mousedown-Ereignis wird nur ausgelöst, der von einem realen user-Taste klicken, aber ich muss annehmen, dass es einige Skript-Methode zur Emulation eines mousedown-neben einer Schaltfläche click-Ereignis
$(me.container + ' .mybutton').mousedown(function (e) {
alert('mouseisdown real button click');
}
Wenn jemand herausfinden kann, ist eine zuverlässige Methode, die funktioniert in mehreren Browsern, erkennt den Unterschied zwischen einem synthetischen (Skript) - Taste, klicken Sie auf und klicken auf eine Schaltfläche von einem Benutzer, Sie verdienen Superhelden-status.
Für firefox e.isTrusted arbeitet, nicht wissen, für andere. e.isTrsuted funktioniert nicht 😉
InformationsquelleAutor user151402 | 2013-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
beim klicken auf eine Schaltfläche erfolgt durch die Maus, die das Ereignis e hat in der Regel die Position des Mauszeigers aufgezeichnet. Probieren Sie etwas wie :
Funktioniert bei Chrome, aber nicht in IE dev-Konsole. In IE e.screenX +Werte für die manuelle und skriptgesteuerte Taste.klicken Sie auf
InformationsquelleAutor Raja
Nein, es ist nicht möglich, in allen Fällen.
Anderen Antworten erwähnt, können Sie für die Koordinaten der Maus (clientX/Y und screenX/Y), und wenn Sie nicht vorhanden ist, können Sie davon ausgehen, es war wahrscheinlich nicht eine von Menschen erzeugte Aktion.
Aber, wenn der Benutzer mit der Tabulatortaste auf den Knopf und nutzt die Leertaste, und klicken Sie auf es, oder sonst klickt, ohne dass eine Maus, die Koordinaten werden auch gleich null sein, und diese Methode wird nicht richtig entscheiden, es zu sein, ein Skript auf.
Auch, wenn das Skript verwendet
dispatchEvent
stattclick
können die Koordinaten gegeben werden, die Veranstaltung. In diesem Fall wird diese Methode nicht richtig identifizieren es als user-generated klicken.http://jsfiddle.net/bYq7m/
InformationsquelleAutor Dagg Nabbit
Für security-Zwecke, wenn Sie ein Ereignis auslösen, mit javascript wird es registrieren anders, als wenn der Benutzer, der das Ereignis ausgelöst hat. Konsole an der
ev
Objekt und sehen Sie signifikante Unterschiede zwischen den beiden Fällen.Hier sind einige Beispiel-Ausgabe von zwei Fällen:
In Chrome auf die Schaltfläche.klicken Sie auf event: e zeigt (e.originalEvent.Typ == 'mousedown') für ein scripted klicken und eine echte auf. Gibt es andere Eigenschaften, die anders sein wird und konsistent über verschiedene Browser?
Wie etwa ev.isTrigger
InformationsquelleAutor Kyle - Microsoft
Fiddle Hier.
Oder Javascript:
Können Sie sehen, in der Geige, wird es nicht lassen-trigger-Funktion zu rufen, aber nur, wenn sich der Mauszeiger unten auf den button. Wenn die automatisierte klicken Sie ausgelöst wird, auf die Schaltfläche klicken und dann
e.which
ist nicht definiert, welche gefangen werden können, leicht.UPDATE : Fiddle Für Javascript
Haben Sie versucht
document.getElementsByTagName('button')[0].click();
?Wie könnte dies nützlich sein? Am besten hast du einen Weg gefunden, der die Registrierung eines Ereignisses, dass nicht Feuer, wenn Sie rufen Sie die click-Methode auf das element. Das erfüllt nicht die Anforderungen an die Frage. jsfiddle.net/sRf5H/6
Was ist, wenn der Benutzer mit der Tabulatortaste auf die Schaltfläche und drückt die Leertaste, um zu "klicken"?
siehe meine Antwort...
InformationsquelleAutor Muhammad Talha Akbar