Flynn: Applet über Javascript anzusprechen

Hallo zusammen,

ich möchte gerne ein Applet über Javascript ansprechen.
Ist ja an sich nicht das Problem, allerdings kenne ich das Applet und seine Schnittstellen und somit seine öffentlichen Methoden nicht ( die es aber mit sicherhiet gibt).

Gibt es eine Möglichkeit, an die Informationen zu kommen? Ist ein Java-Decompiler von nöten?  Wo bekommt einen her? Ist das überhaupt rechtens, ein von jemand anderen erstelltes Applet auf diese Weise zu gebrauchen.

Und wenn das Applet aus mehreren class-Dateien besteht,wie lautet der korrekte Syntax, eine Methode der Klassen anzusprechen?
So etwas wie "document.AppletName.ClassName.MethodeName()" funktioniert nämlich nicht.

Danke und viele Grüsse
Flynn

  1. Hallo Flynn!

    Bei Java gibt es eine Schnittstelle, mit der man ermitteln kann, welche Methoden eine Klasse hat. Diese Schnittstelle kann man auch von JavaScript aus nutzen.
    Hier ein Beispiel, das alle Methoden eines Applets ausgibt:

    <html>
    <head>
    <title>Chat</title>
    <script>
    function list() {
      var applet = document.getElementById("app");
      var text = "<p style='white-space:pre'>";
      text += applet.getAppletInfo();
      var info = applet.getParameterInfo();
      text += "</p><table><tr><th>Name</th><th>Typ</th><th>Beschreibung</th></tr>";
      for(var a = 0; a < info.length; a++) {
        text += "<tr><td>" + info[a][0] + "</td><td>" + info[a][1] + "</td><td>" + info[a][2] + "</td></tr>";
      }
      text +="</table><p>";
      var methods = applet.getClass().getMethods();
      for(var a = 0; a < methods.length; a++) {
        if(methods[a].getDeclaringClass() == applet.getClass() && java.lang.reflect.Modifier.isPublic(methods[a].getModifiers())) {
          text += methods[a].getReturnType().getName() + " <b>" + methods[a].getName() + "(</b>";
          var params = methods[a].getParameterTypes();
          for(var b = 0; b < params.length; b++) {
            if(b != 0) {
              text += ", ";
            }
            text += params[b].getName();
          }
          text += "<b>)</b><br>";
        }
      }
      text+="</p>";
      document.getElementById("out").innerHTML = text;
    }
    </script>
    </head>
    <body bgcolor=#FFEEDD text=#000000 link=#AA5522 vlink=#772200 alink=#000000>
    <div align="center">
    <applet [...] id="app" mayscript="mayscript">
    </applet>
    </div>
    <div>
    <a href="#" onclick="list(); return false;">list</a>
    </div>
    <div id="out">
    </div>
    </body>
    </html>

    Das Script Funktioniert nur im Mozilla/Netscape 6+ und gibt auch noch einige weitere Informationen aus.

    Grüße

    Daniel

  2. Hallo zusammen,

    ich möchte gerne ein Applet über Javascript ansprechen.
    Ist ja an sich nicht das Problem, allerdings kenne ich das Applet und seine Schnittstellen und somit seine öffentlichen Methoden nicht ( die es aber mit sicherhiet gibt).

    alle methoden (functions) sind mit public sichtbar gemacht. sieht man aber nur im sourceCode. alle methoden ohne public sind nicht von außen aufrufbar.

    Gibt es eine Möglichkeit, an die Informationen zu kommen? Ist ein Java-Decompiler von nöten?  Wo bekommt einen her? Ist das überhaupt rechtens, ein von jemand anderen erstelltes Applet auf diese Weise zu gebrauchen.

    du kannst natürlich den compilierten Code wieder decopilieren. das funktioniert zwar nur bedingt, kann aber schon die public methoden frei geben. wichtig sind aber nicht nur die methoden, sondern auch die argumente.
    wenn du ein applet benutzt, das nicht vom author frei gegeben ist, ist es nicht rechtes, dieses in eine neue site einzubauen. ganz klar.

    Und wenn das Applet aus mehreren class-Dateien besteht,wie lautet der korrekte Syntax, eine Methode der Klassen anzusprechen?

    die classes sind sogenannte schablonen für neue instanzen. du müsstes den instanzNamen wissen. und außerdem muss die instanz auch public sein, damit diese auch für dich sichtbar sind. der ClassName hat also keine wirkung.

    So etwas wie "document.AppletName.ClassName.MethodeName()" funktioniert nämlich nicht.

    Danke und viele Grüsse
    Flyn

    viel wichtiger: einige browser haben keine schnittstelle zwischen Java und java-script, z.b. macIE.
    du siehst, alles in allem ist das ganz ist mehr als schwer zu erklären.