Auslösen eines Klickereignisses aus dem Inhaltsskript - Chrome-Erweiterung

7

Im Inhaltsskript meiner Chrome-Erweiterung klicke ich auf bestimmte Links / Schaltflächen auf Webseiten bestimmter Websites. Um dies zu tun, verwende ich folgenden Code im Inhaltsskript (Ich bette jQuery in das Inhaltsskript ein):

%Vor%

Dies funktioniert auf den meisten Websites.

Auf bestimmten Websites wie delta.com, match.com und paypal.com funktioniert diese Art des Klickens auf Elemente jedoch nicht. Auf delta.com bekomme ich folgende Ausnahme, wenn ich versuche, im Inhaltsskript auszulösen:

%Vor%

Seltsame Sache ist, wenn ich Javascript consoleon delta.com öffne, eine jQuery einschließe und das gleiche klickende Triggercode-Snippet versuche, funktioniert es.

Bei match.com und paypal.com funktioniert das Triggern einfach nicht im Inhaltsskript und es gibt keinen Fehler. Ich kann nicht einmal "Klick" -Ereignis durch JavaScript-Konsole auslösen, so wie ich es bei delta.com getan habe.

Wenn ich manuell einen Mausklick verwende, funktioniert alles auf allen drei Seiten. Daher habe ich auch versucht, das mit mousedown (), mouseup () zu simulieren, aber das hat auch nicht funktioniert.

Dies scheint ein Problem zu sein, weil Javascripts von diesen Sites Hijacking und Ignorieren von Ereignissen sind. Ich habe versucht, Code von diesen Seiten zu lesen, um zu sehen, was passiert, aber es gab einfach zu viel Code.

Hat jemand eine Vorstellung davon, was hier passiert und wie man es repariert?

    
Methos 23.07.2013, 19:29
quelle

3 Antworten

18

Aufgrund der Sandboxing-Funktion für Browsererweiterungen und der grundlegenden jQuery-Funktionalität können Sie kein Clickereignis ohne jQuery mit trigger oder click auslösen.

Sie können jedoch das rohe DOM-Element click -Methode aufrufen, das genau so wirkt, als wäre das Element mit der Maus angeklickt worden. Verwenden Sie einfach [0] , um auf das DOM-Element zuzugreifen:

%Vor%

Obwohl Sie dies selten tun müssten, können Sie alle übereinstimmenden Schaltflächen mit demselben Code in each auslösen. Da dies in each das DOM-Element ist, ist es ziemlich einfach:

%Vor%     
Gone Coding 08.02.2015 21:35
quelle
7
  

jQuerys Klick-Trigger-Funktion löst kein Nicht-jQuery-DOM aus   Klicken Sie auf Listener (jsfiddle.net/k2W6M).

Die jQuery-Dokumentation sollte wirklich auf diese Tatsache hinweisen. Ich bin mir sicher, dass mehr als ein paar Leute eine wilde Jagd nach diesem Thema unternommen haben.

Ich hatte ein paar Tage lang mit dem gleichen Problem zu kämpfen und versuchte, einen onclick -Handler auf einen Link mit .click () und .trigger ("click") auszulösen Ich habe das gesehen.

Um eine vollständige Antwort auf diese Frage zu erhalten, senden Sie ein MouseEvent für das Element hat den gleichen Effekt wie das Klicken auf das Element. Der folgende Code funktionierte für mich und sollte funktionieren, wenn Sie versuchen, aus einem Inhaltsskript auf ein Element / einen Link auf einer Seite zu klicken:

%Vor%     
chnrxn 03.01.2015 09:02
quelle
-1

content_script wird sandboxed ausgeführt, siehe Ссылка

Allerdings haben Inhaltsskripts einige Einschränkungen. Sie können nicht:

  • Verwenden Sie Variablen oder Funktionen, die auf den Seiten ihrer Erweiterung definiert sind
  • Verwenden Sie Variablen oder Funktionen, die auf Webseiten oder anderen Inhaltsskripten definiert sind

$ im content_script kann nicht auf $ auf der Webseite zugreifen, aber die Ereignisdaten speichern inneres $, also konnten wir nicht auslösen.

%Vor%     
magicdawn 08.01.2015 13:24
quelle