Laden...

Mit Javascript das aufrufende Objekt ermitteln

Erstellt von joh.w vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.452 Views
J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 14 Jahren
Mit Javascript das aufrufende Objekt ermitteln

Hallo zusammen,

ich bin gerade etwas ideenlos und weiß nicht wo ich ansetzen soll zu suchen. Hoffe es kennt sich jemand mit Javascript aus und kann mir einen Hinweis geben.

Zum Problem:
Auf einer Webseite ist ein Java-Applet vorhanden. Dieses Applet ruft eine Javascript-Methode auf, wenn es seine Daten verändert. Als Parameter krieg ich 2 string mit denen ich ermitteln kann, welche Daten aktuell gezeigt werden. Das Java-Applet ist nicht von mir, sondern dazu gekauft und es besteht keine Chance hier was zu ändern.

Jetzt ist es aber so, dass ich auf einer Seite nicht nur ein Java-Applet, sondern eben mehr anzeigen will. Ganz in dem Sinne eines Dashboards. Das funktioniert auch soweit. Dumm nur, dass alle Applets die Javascript-Methode "onShowView" aufrufen und dort ihre zwei Strings übergeben.
Ich möchte jetzt aber auch noch wissen welches der Applets hier diese onShowView-Methode aufgerufen hat.

Meine bisherigen Ideen gehen in folgende Richtung:

  • Per Reflection das aufrufende Objekt ermitteln (weiß noch nicht mal ob Javascript das unterstützt)
  • Die Webseite so rendern, dass es die onShowView-Methode mehrmals gibt, aber eben in relation zum dazugehörigen Applet gerufen wird (weiß auch nicht, wie man sowas in Javascript realisieren kann)

X(

joh.w

3.971 Beiträge seit 2006
vor 14 Jahren

Mach doch ein dritten Parameter, wo der Applet-Name übergeben wird.

Du kannst in JS auch Klassen erstellen und diese beliebig von einander vererben und überschreiben (Stichwort Prototype)

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 14 Jahren

Wäre ich der Erfinder des Applets, hätte ich das generell so gemacht.

Aber keine Chance. Das Applet ruft knallhart die Methode "onShowView(string, string)" auf. Wenn es die nicht gibt --> Fehler.

3.170 Beiträge seit 2006
vor 14 Jahren

Hallo,

ich weiß nicht wie das ist wenn die Funktion von einem Java-Applet aufgerufen wird, aber Du könntest mal die "caller"-Property der JavaScript-Funktion auswerten:

http://de.selfhtml.org/javascript/objekte/function.htm#caller

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 14 Jahren

Hallo MarsStein,

gute Idee, aber in meinem Test zeigt sich, dass {Methode}.caller schlicht "null" ist 🙁

Ich hab ein bisschen mit Analysetools mir die jar-Datei des Applets angesehen. Hier ist es so, dass diese "onShowView"-Methode über ein Observable gerufen wird. Wenn das so ist, müsste ich mich doch nur pro Applet auf eine "andere" onShowView registrieren. Muss da mal weiter forschen ob ich da eingreifen kann im Initialisierungsprozess.

joh.w

J
joh.w Themenstarter:in
140 Beiträge seit 2006
vor 14 Jahren

Habe einen "hinten-durch-die-Brust"-Trick gefunden. Ich werte das onmouseover event des applet-tags im browser aus und setzte dort in eine variable die applet instanz rein, wo der Mauszeiger zuletzt drüber gelaufen ist.
Kommt nun vom Applet selbst die onShowView, kuck ich einfach in die onmouseover variable rein und geh davon aus, dass ich das richtige Applet erwischt habe.

"Ich geh davon aus" deswegen, da man die Anwendung im Applet fast ausschließlich mit der Mausbedienen muss.

Dürfte aber ingesamt passen 😃

3.170 Beiträge seit 2006
vor 14 Jahren

Hallo,

der "caller" in JS ist sowieso deprecated... wer weiß wie da die Unterstützung ist, und irgendwie hatte ich auch vermutet daß da bei Aufrufen aus Applets nix vernünftiges rauskommt.
Dein Workaround ist zwar auf den ersten Blick grausig, aber bei der Webentwicklung mit JS muss man halt manchmal auf solche "unschönen" Verfahren zurückgreifen. 🙁
Solange es funzt: Toi, toi, toi 😉

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

U
237 Beiträge seit 2007
vor 14 Jahren

was kommt raus, wenn du das schlüsselwort this ausgibst?

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int