Wenn ich einen Klick mit jquery initiiere, der window.open()
tut, wird es durch Pop-up-Blocker blockiert, wenn ich den Klick manuell mache, wird das Fenster nicht blockiert. Wie unterscheidet sich der Browser zwischen den beiden?Wie unterscheidet der Browser den Unterschied zwischen Benutzerklick und programmatischem Klick?
Antwort
Die Firefox Umsetzung dieser wird ausführlich auf this bug, diskutiert und this other bug hat einigen weiteren interessanten Hintergrund, einschließlich dem, was wird, um Längen Seiten geht durch ein unerwünschtes Popup-Fenster auf ahnungslosen Benutzern (in diesem Fall aufzuzuzwingen: Aufruf window.open()
aus in einem Bild load
Ereignis). Wenn Sie in der Umgebung von Bugzilla suchen, werden Sie feststellen, dass die Mozilla-Benutzer einige Jahre gebraucht haben, um alles richtig zu machen, zum Beispiel here's a bug from 2001.
So wie es zur Zeit arbeitet, ist dies: Wenn Firefox ein Click-Ereignis von dem Betriebssystem erhält, für eine gewisse Zeit window.open()
ist in JavaScript (suchen Sie nach dom.disable_open_click_delay
in about:config
) aktiviert. Wenn Sie das click()
-Ereignis von Code aufrufen, ohne dass ein Benutzerklick auftritt, dann wird der erste Schritt, die Aktivierung von window.open()
, niemals ausgeführt, obwohl der Aufruf an window.open()
selbst erfolgreich sein wird to stop sites detecting that you have popup blocking enabled.
Ich bin nicht sicher, wie andere Browser dieses Zeug implementieren, aber es wäre überraschend für mich, wenn es viel anders wäre.
Ich glaube, dass Aufruf click
über jQuery tatsächlich nicht wirklich einen Klick auf das Element auslöst, sondern ruft stattdessen die Funktion auf den Klick zu hören. Also, obwohl Sie click()
anrufen, rufen Sie eigentlich nur eine Funktion auf.
Wenn der Benutzer klickt, ist es ein echter Klick.
Beispiel:
var handler = function() {
alert('hi');
};
$('#example').on('click', handler);
$('#example').click(); // really just calls handler();
Gilt das auch für das native Javascript .click()? – nbrooks
Interessant zu beachten: Wenn Sie als Benutzer alles tun, was dazu führt, dass der Klickcode ausgeführt wird, tut es das immer noch. Dazu gehört auch das Klicken auf etwas, das das Click-Ereignis aufruft. Oder sogar ein Pressetermin kann es nennen und es wird funktionieren. – sachleen
Es ist schwer vorherzusagen, wie der Browser diese Prüfung implementiert, da in der Spezifikation nichts zu bestimmen ist, wann der Benutzer dazu aufgefordert werden sollte. http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-2651361 – Fenton
der nativen Code des Browsers übernimmt das eigentliche Klick-Ereignis Maus (vom Betriebssystem) und erstellt das Browser-Ereignisobjekt. An diesem Punkt im nativen Code des Browsers weiß der Browser, dass dieses Ereignis durch einen echten Mausklick erstellt wurde.
Meine Vermutung wäre, dass es einige versteckte Daten (nicht zugänglich von Javascript) an das Ereignis angehängt, die den Browser verfolgen, ob das Ereignis über einen echten Mausklick initiiert wurde oder nicht, obwohl es andere Implementierungsmechanismen könnte auch.
- 1. Was ist der Unterschied zwischen den Klick- und Tippereignissen?
- 2. Dashcode unterscheidet zwischen iPad und iPhone Browser
- 3. Wie unterscheidet man zwischen Klick- und Drag/Drop-Event?
- 4. Wie unterscheidet ein Browser zwischen XHTML 1.0 und XHTML 5?
- 5. Wie unterscheidet man zwischen ACTION_UP und dem tatsächlichen Klick über den onTouchListener?
- 6. Was ist der Unterschied zwischen "Mausaufruf" und "Klick" -Ereignissen?
- 7. Finding den Unterschied zwischen Arrays und aktualisieren
- 8. Wie unterscheidet Python zwischen den verschiedenen Datentypen?
- 9. unterscheidet zwischen "GetDocumentElement" und "GetFirstChild"
- 10. Was ist der Unterschied zwischen Beenden und Fortsetzen in Browser()?
- 11. Was ist der Unterschied zwischen Android Native Browser und Chrome
- 12. Der Unterschied zwischen den Schleifen
- 13. unterscheidet zwischen @Model und @Modell
- 14. ggplot2: Wie unterscheidet man Klick von Pinsel?
- 15. wie man zwischen Kommentaren und Antworten unterscheidet
- 16. unterscheidet zwischen Object.toString und Object.prototype.toString
- 17. Unterschied zwischen Referenzen und Zeiger
- 18. , was der Unterschied zwischen hadoop.tmp.dir und mapred.temp.dir und mapreduce.cluster.temp.dir
- 19. Wie unterscheidet man zwischen Sprachanruf und Videoanruf auf Android?
- 20. Unterschied zwischen den Funktionstypen
- 21. Unterschied zwischen -all_load und -ObjC
- 22. Wie man zwischen lokalen nicht festgeschriebenen Änderungen und Ursprung unterscheidet
- 23. Den Unterschied zwischen Design- und Stilattributen verstehen
- 24. Unterschied zwischen malloc und dlmalloc
- 25. Unterschied zwischen Attributrichtlinie und Elementeigenschaftensyntax?
- 26. mysql: der geringste Unterschied zwischen den Tagen
- 27. Unterschied zwischen den Methoden PrintWriter.printf und PrintWriter.format
- 28. Unterschied zwischen den Ansichten und SELECT-Abfragen
- 29. Unterschied zwischen den Präprozessordirektiven #if und #ifdef
- 30. Unterschied zwischen ParameterInfo.DefaultValue und ParameterInfo.RawDefaultValue
Hier ist ein [jsfiddle] (http://jsfiddle.net/twMSG/1/) zu demonstrieren. Es wird versuchen, beim Laden der Seite zu popup, aber blockiert werden. Wenn Sie das Click-Ereignis programmgesteuert aufrufen, wird es zwar blockiert, aber wenn Sie es innerhalb eines anderen Click-Ereignisses aufrufen, wird es ausgeführt. – sachleen