• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Erkennen ob Button gegklickt wurde

SykesXable

New member
Moin,
ich bin neu hier im Forum und bräuchte mal eure Hilfe :)

Undzwar bin ich dabei ein Script für Greasemonkey zu machen und ich muss damit erkennen können
wenn auf einer Website ein Button geklickt wurde. Allerdings sind die Button nicht direkt im Quelltext
sondern irgendwie anders 'verankert' - da ich nicht genau weiß wie ich das beschreiben soll
poste ich am Ende den Link der Website.
Wenn ich im FireFox auf Element untersuchen gehe finde ich zwar eine ID zum Button allerdings kann ich
damit den button nicht ansprechen ...

Website: https://www.optionyard.com/traderoom/
Auf der Seite muss das Script erkennen wenn der Benutzer auf Above oder Below klickt.

Danke im Vorraus :)
MfG
 
Zuletzt bearbeitet von einem Moderator:
Wenn du die Buttons im GM-Skript nicht über die ID ansprechen kannst, dann sind sie wahrscheinlich noch nicht erzeugt worden. Mach' doch einfach window.setTimeout() mit z.B. 100 ms Wartezeit und versuche dann auf die Buttons zuzugreifen.
 
Das Problem ist glaube ich was anderes undzwar ist der Button halt nicht direkt im Quelltext der Seite sondern wird glaube ich durch ein JavaScript erzeugt. Villt. müsste man innerhalb des Scripts nach der ID suchen und nicht im Quelltext der Seite von wo
das Script nur geladen wird.
Wäre super wenn das mal jemand angucken könnte auf der Seite (Link steht im Startpost) der davon Ahnung hat :)
 
Mir ist das Problem schon klar. Hast du denn meinen Ansatz ausprobiert?

PS: wie soll es dir beim GM-Skript helfen, wenn du im JS-Quelltext die Stelle findest, an der die Buttons erzeugt werden?
 
Hab ich ausprobiert allerdings bekomm ich immer den Fehler:
Exception: document.getElementById(...) is null - zum testen versuch ich einfach den Button zu klicken per JS

Bin da echt ratlos..
 
Die Fehlermeldung ist aber deutlich. Das Element mit der gewünschten ID gibt es nicht. Tippfehler oder Fehler in der logischen Reihenfolge.
 
Tippfehler in der ID sind ausgeschlossen. Deswegen hab ich ja gefragt ob sich das jemand mal direkt auf der Seite ansehen könnte..
 
So... hab' den Quelltext jetzt mal genauer angesehen.

Die Buttons sind schon im HTML-Quelltext enthalten. ABER die sind in einem iFrame drin. Du musst also dein GM-Skript in der Seite, die im iFrame angezeigt wird, ausführen und nicht in der außeren. Dann kannst du auch auf die Buttons zugreifen. Über das <iframe> per contentDocument "durch" das iFrame durchgreifen kannst du wegen der SOP hier nicht.

@hesst: es würde helfen zu verstehen, warum man nicht darauf zugreifen kann, aber da GM-Skripts am Ende des onload laufen, würde ich erwarten, dass man sich an das Ereigniss nicht "ranhängen" kann, da es dann durch die Antwort auf einen AJAX-Request oder ein timeout ausgelöst wird. Mir fallen jedenfalls keine anderen Möglichkeiten ein, wie beim Laden der Seite etwas angezeigt werden kann, wenn es am Ende des onload aber noch nicht da ist. Dir?
 
Hab ich ausprobiert allerdings bekomm ich immer den Fehler:
was hast du ausprobiert? und wo bekommst du den fehler?
das es onload nicht geht schriebst du ja bereits.
sonst geh einfach über eventdelagation, mit jquery ein einzeiler, ohne auch kein problem.

edit: hat sich demnach erledigt

es würde helfen zu verstehen, warum man nicht darauf zugreifen kann, aber da GM-Skripts am Ende des onload laufen, würde ich erwarten, dass man sich an das Ereigniss nicht "ranhängen" kann, da es dann durch die Antwort auf einen AJAX-Request oder ein timeout ausgelöst wird.
den timeout kann man dann selbst auch starten(etwas länger), ajax wäre nicht so einfach, da bliebe nur DOMNodeInserted, onclick,mouseover,... dann wieder problemlos

Mir fallen jedenfalls keine anderen Möglichkeiten ein, wie beim Laden der Seite etwas angezeigt werden kann, wenn es am Ende des onload aber noch nicht da ist. Dir?
einfach das gleiche event nutzen
 
Zuletzt bearbeitet:
den timeout kann man dann selbst auch starten(etwas länger)
Das war ja mein erster Vorschlag gewesen.
, ajax wäre nicht so einfach
Da würde ich auch window.setTimeout() verwenden und einfach pollen, ob die Buttons schon da sind.
, da bliebe nur DOMNodeInserted, onclick,mouseover,... dann wieder problemlos
Wer verwendet denn onclick oder mouseover um Elemente beim Laden der Seite zu erstellen? Das ergibt für mich keinen Sinn.

DOMNodeInserted wäre natürlich eine Möglichkeit um auf das Einfügen zu reagieren. Wobei das ja durch https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ersetzt werden soll.


einfach das gleiche event nutzen
Du hast mich falsch verstanden. Ich meinte eine weitere Möglichkeit, mit der die Webseite die Buttons erstellt, nicht wie man sich dann dahinterklemmt.
 
Das war ja mein erster Vorschlag gewesen.
aber ich meinte, wenn es eine bessere möglichkeit gäbe, müsste man nicht pollen

Wer verwendet denn onclick oder mouseover um Elemente beim Laden der Seite zu erstellen? Das ergibt für mich keinen Sinn.
http://forum.jswelt.de/javascript/5...ar-elemente-hinzuf-gen-ohne-datenverlust.html

Du hast mich falsch verstanden. Ich meinte eine weitere Möglichkeit, mit der die Webseite die Buttons erstellt, nicht wie man sich dann dahinterklemmt.
ahh ja, ich hatte das so verstanden, dass er irgendwo die id im originalcode gefunden hat, nicht dass das element nahezu mit onload auch da ist
 
aber ich meinte, wenn es eine bessere möglichkeit gäbe, müsste man nicht pollen
Klar - alles ist besser als pollen. Pollen ist wie kleine Kinder, die die ganze Fahrt fragen: "Sind wir schon da? Sind wir schon da? Sind wir schon da? ..." ;)

http://forum.jswelt.de/javascript/5...ar-elemente-hinzuf-gen-ohne-datenverlust.html

ahh ja, ich hatte das so verstanden, dass er irgendwo die id im originalcode gefunden hat, nicht dass das element nahezu mit onload auch da ist
Ja - da haben wir aneinander vorbei geredet. In dem anderen Thread wäre natürlich die geschickteste Variante, dass man sich auch bei dem onclick dazuhängt.

Aber auf der Seite ist es so, dass die Buttons gleich angezeigt werden - sind ja auch schon im HTML vorhanden.

Dann haben wir ja alle Klarheiten beseitigt. ;)
 
Erstmal Danke für den Tipp mit dem iFrame.
Wenn ich jetzt in der JS-Umgebung des FireFox folgendendes eingebe:
Code:
$("#iframeWL").contents("#TradeActionCall60_0").click(popup);

function popup() {
window.open(url, "Popupfenster", "width=400,height=300,resizable=yes");
}

dann bekomme ich auch nur wieder eine Fehlermeldung:
Exception: Permission denied to access property 'document'
.contents@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
.map@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
v.fn[e]@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2

Wenn ich das richtig deute hab ich kein Zugriff auf die Seite? Oder ist das nur einer Fehler meinerseits?

MfG
 
Code:
Exception: Permission denied to access property 'document'
.contents@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
.map@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
v.fn[e]@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
@Scratchpad/7:11
v.Callbacks/l@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
v.Callbacks/c.add@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2
v.prototype.ready@https://www.optionyard.com/wp-content/plugins/tradologic-plugin/javascript/jquery.js?ver=0.12.10:2

Die Exception bekomm ich wenn ich versuche den Button zu überwachen, kann man da irgendwas machen oder mach ich was falsch?
 
Zurück
Oben