Das auslösen einer click-Ereignis von der content-script - Erweiterung für Google chrome
In meinem chrome-Erweiterung Inhalt Skript, klicke ich auf einige links/buttons auf Webseiten, die von bestimmten Websites. Um das zu tun, ich benutze folgenden code in das content-Skript (ich embed jQuery im content-Skript):
$(css_selector).trigger("click")
Dies funktioniert auf den meisten Websites.
Jedoch auf bestimmte Websites wie delta.com, match.com und paypal.com diese Art der Triggerung ein Klick auf Elemente, die nicht funktioniert. Auf delta.com bekomme ich folgende exception geworfen, wenn ich versuche Auslösung in das content-Skript:
Error: An attempt was made to reference a Node in a context where it does not exist.
Error: NotFoundError: DOM Exception 8
Merkwürdige ist, wenn ich javascript consoleon delta.com sind, eine jQuery und versuchen das gleiche auf die Auslösung code-snippet, es funktioniert.
Auf match.com und paypal.com die Auslösung funktioniert einfach nicht in das content-Skript und es gibt keine Fehler. Ich kann mir gar nicht auslösen "Klick" - Ereignis durch javascript-Konsole, wie ich es Tat auf delta.com.
Wenn ich manuell mit der Maus klicken, alles funktioniert einwandfrei auf allen drei Seiten. Daher habe ich auch versucht zu simulieren, dass mit mousedown(), mouseup(), aber das hat nicht funktioniert entweder.
Scheint dies Problem, da javascript von diesen Seiten sind Entführung und ignorieren die Ereignisse. Ich versuchte zu Lesen, code von diesen Seiten, um zu sehen, was passiert, aber es war einfach zu viel code.
Hat jemand eine Idee, was hier geschieht und wie es zu lösen ist?
- Mögliche Duplikate von: wie senden "keydown" Ereignis, um die Seite input? - jQuery -
click
trigger-Funktion nicht auslösen, ein nicht-jQuery-DOM-Klick-listener (jsfiddle.net/k2W6M). Die Standorte, an denen Sie Ihren code gearbeitet, kann bereits die Nutzung von jQuery für Ihre Zuhörer, so dass Ihr jQuery trigger gearbeitet. Alternativ können einige Websites möglicherweise überprüfen Sie, ob Ihre Klicks sind tatsächliche oder programmatische. - Ich habe
$('li.business a')[0].click()
scheint zu funktionieren auf paypal.com home-Seite. - danke. Ich folgte Ihr links und fand die Antwort in dem letzten link. Jetzt erstelle ich Mausevents und Versand. Das funktioniert auf allen Seiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufgrund von browser-Erweiterung sand-Boxen, und grundlegende jQuery-Funktionen, können Sie nicht auslösen, ein nicht-jQuery-click-Ereignis mit
trigger
oderclick
.Können Sie jedoch die raw-DOM-element
click
Methode, die handeln genau so, als ob das element mit der Maus angeklickt werden. Verwenden Sie einfach[0]
Zugriff auf das DOM-element:Zwar würden Sie selten brauchen, können Sie veranlassen, dass alle entsprechenden Tasten mit dem gleichen code in ein
each
. Als die diese in einemeach
ist das DOM-element ist es ganz einfach:Die jQuery-Dokumentation sollte wirklich darauf hinweisen, diese Tatsache. Ich bin sicher, dass mehr als ein paar Leute gegangen sind, auf eine wilde Verfolgungsjagd über diese.
Ich kämpfte mit diesem problem seit ein paar Tagen versucht, das auslösen eines onclick handler auf einen link mit .klicken Sie auf() und .trigger("click"), alle vergeblich, bis ich dies sah.
Zuliebe eine vollständige Antwort auf diese Frage, die Entsendung eines MouseEvent, um das element hat die gleiche Wirkung wie das klicken auf das element. Der folgende code funktionierte für mich, und sollte funktionieren, wenn Sie versuchen auf ein element/link auf eine Webseite von einem content-script:
content_script in der Sandbox ausgeführt,siehe https://developer.chrome.com/extensions/content_scripts
Jedoch, Inhalte, Skripte haben einige Einschränkungen. Sie können nicht:
$ in die content_script nicht zugreifen können, $ auf der Webseite,aber die Ereignisse gespeicherten Daten inner $,so konnten wir nicht auslösen.
cur
ist DOM-Objekt,jQuery._data(cur,"events")
bekommtjQuery.cache[cur[jQuery.expando]].events
, das zeigt dieevents
Daten gespeichert sind, injQuery.cache
Objekt , und es ist sandbox ausgeführt. Also die in unserem content-Skript , können wir nicht auf der WebseitejQuery
Objekt , Ursache derhandle
im code oben ist null.