event kopieren?

lano

Mitglied
Moin.
Mal ne Frage.
Angenommen ich hab eine seite mit einem element und einem event listener da dran.
Bei klick öffnet sich fenster x.

Ist das jetzt möglich diesen event auch einem anderen element hinzuzufügen?
Also kopieren.
get event id from elem bla.. so irgendwie irgendwas in der richtung?
 

asc

Mitglied
devCommunity-Experte
Generell sind Event-Listener ja nur Funktionen.
Du kannst die selbe Funktion zu mehreren Elementen hinzufügen.

Javascript:
function sayHello(e) {
    console.log('hello from:', e.target);
}

let foo = document.querySelector('#foo');
foo.addEventListener('click', sayHello);

let bar = document.querySelector('#bar');
bar.addEventListener('click', sayHello);
 

lano

Mitglied
Du kannst die selbe Funktion zu mehreren Elementen hinzufügen.
Ja sorry. Ich raff das ganze nicht so.

ich glaub ich muss das ma bebildert erklären.

Screenshot_20200707_025736.png

Ich hab die Oberfläche von der Fritzbox.
Oben "FRITZ!Feedback" und "FRITZ!bash" hab ich quasi mittels firefox extension erstellt.
Jetzt ist das so wenn man bei "FRITZ!OS: 07.20 - Version aktuell" auf die Versionsnummer klickt sich ein fenster öffnet.
Screenshot_20200707_030135.png
Wenn ich mir jetzt den link da ansehe ist das ein div mit event.
Screenshot_20200707_030338.png

Diese Funktion will ich auch aufrufen. Wenn man auf "FRITZ!bash" klickt.

Ich hab mal versucht die Funktion in der Console zu starten, aber der findet die nicht.
Scheiß Javascript ist komplettes neuland für mich, versteh ich gar nicht.
Die funktion ist in einer lib drin, an die man so wohl nicht von außen ran kommt, so wie ich das bisher verstanden habe und das ist eigentlich gar nix.
Ich frag mich dann aber wie die funktion dann überhaupt aufgerufen wird.
Die Fritzbox läd die libs die sie braucht immer nach. ich hab die einfach in header hinzugefügt. manches funktioniert, manches bekomm ich nicht hin, was sehr daran liegt das mir das alles unverständlich ist mit den ganzen funktionen.

Wenn ich mich recht erinnere müsste die funktion hier drin sein http://fritz.box/js/avmcontent.js?lang=de
falls du ne fritzbox hast mit neuer 7.20 version oder zumindest aktueller labor version.
@JR Cologne Darf man son quelltext posten? Bin auf dem ganzen weg dahin keinem Hinweis begegnet.
 

lano

Mitglied
ok. ich lass das ma so stehen.


Ich habs aber langsam begriffen. Hat jetzt ne woche gedauert, aber jetzt hab ich den anfang gefunden.

Wer aber trotzdem was schreiben will, ich könnt so mittelschwere anfänger tips gebrauchen. :D
 

JR Cologne

Administrator
Teammitglied
@JR Cologne Darf man son quelltext posten? Bin auf dem ganzen weg dahin keinem Hinweis begegnet.
AVM-Quellcode? Schwierig. Solange du nur kleine Auszüge daraus "zitierst", ist das wahrscheinlich nicht so problematisch.
Bei nicht lizenzierten Code wäre ich grundsätzlich aber eher vorsichtig.
 

alinnert

Mitglied
Um das mit den Funktionen zu erklären: Funktionen sind vergleichbar mit Variablen. Auf die hast du in der Konsole nur Zugriff, wenn sie global definiert sind. Wenn sie aber innerhalb einer Funktion definiert sind, ist sie eben nur in der Funktion sichtbar, nicht aber global.

Javascript:
function main () {
    function innerFn () {}
    const innerVar = 0
}
In so gut wie allen Programmiersprachen ist es so, dass du nur innerhalb von main Zugriff auf innerVar hast. Darum kannst du über die Konsole auch nicht auf innerVar zugreifen. Mit innerFn ist das genauso. Global siehst du nur main.

Du müsstest also im Code schauen, wo die Funktion, die du brauchst, definiert ist und sie von dort aus als Event an das Element hängen.

Zu den Events: Es ist generell nicht möglich, auf ein Event, das an einem Element hängt, nur mithilfe des Elements zuzugreifen. Du brauchst wirklich zwingend die Referenz auf die Funktion, die aufgerufen werden soll. Diese bindest du dann mit element.addEventListener(eventName, eventFunction) an das Element. Anders geht das nicht.

Ich hab jetzt keine Fritz-Box da. Aber steht in der JS-Datei kein Hinweis auf eine Lizenz? Das würde mich in dem Falle sogar fast wundern.
 

lano

Mitglied
Wenn sie aber innerhalb einer Funktion definiert sind, ist sie eben nur in der Funktion sichtbar, nicht aber global.
Ja soweit klar. musste nur erstmal nen auge dafür finden wie sone lib in javascript aussieht.

Du müsstest also im Code schauen, wo die Funktion, die du brauchst, definiert ist und sie von dort aus als Event an das Element hängen.
Hab das jetzt in ne eigene lib kopiert. bleibt mir ja nix anderes übrig.

Es ist generell nicht möglich, auf ein Event, das an einem Element hängt, nur mithilfe des Elements zuzugreifen.
schade.

Aber steht in der JS-Datei kein Hinweis auf eine Lizenz? Das würde mich in dem Falle sogar fast wundern.
Nö. Ja hat mich auch nen stück weit gewundert.

AVM-Quellcode? Schwierig. Solange du nur kleine Auszüge daraus "zitierst", ist das wahrscheinlich nicht so problematisch.
Ich frag da einfach mal nach.
 

Mat

Mitglied
Ich frag da einfach mal nach.
Hier steht zumindest was Allgemeines:

Ist aber leider ein bisschen viel Text und ich weiß nicht, wie sie Reverse-Engineering in diesem Kontext definieren. ^^
Es liest sich, als würden sie sich vor allem rechtlich vor möglichen Schäden absichern. Ich sehe da auf den ersten Blick nichts zur Lizenz von Code, dem keine Lizenz beigelegt ist.
 
Oben Unten