Avatar billede thinge Nybegynder
21. januar 2003 - 09:39 Der er 4 kommentarer og
1 løsning

Kan man kalde en metode i javascript fra en applet

HEJ ALLE
Kan man kalde en metode i javascript fra en applet
Hvis ja hvordan? (giver 30 point)
og hvis nogen ved hvordan man sender en parameter fra javascript til en applet er der 30 point mere!!
Avatar billede bearhugx Nybegynder
21. januar 2003 - 10:48 #1
Her er noget kode, som jeg vil bruge som eksempel i forbindelse med en artikel, jeg er igang med at skrive.

Bemærk at du skal have jaws.jar i din classpath for at kunne kompilere UrApplet.java
Bemærk i HTML-koden at parameteren scriptable (i Object-embeding-koden) er sat true - det skal den være, for at Java kan få fat i JS


[UrApplet.java]
/**
* @author Søren Munk Skrøder
* Til brug i artiklen "Tilgang af JavaScipt-objekter via Java"
*/

import java.applet.*;
import java.util.*;
import netscape.javascript.*;

public class UrApplet extends Applet {
    private JSObject win;

    public void init() {
        try{
            win = JSObject.getWindow(this);
            Timer t = new Timer();
            t.schedule(new JSTask(), 0, 100);
        } catch(Exception ex) {
            getAppletContext().showStatus(ex.toString());
        }       
    }

    private class JSTask extends TimerTask {
        private Date data = new Date();
        public void run() {
            String status = (String) win.getMember("status");
            if(status.equals("running"))
                data = new Date();
            win.eval("data='"+data.toString()+"'");
            win.eval("updateData()");
        }
    }
}

[ur.html]
<html>
    <head>
        <script language="JavaScript">
            var data = "";
            var status = "running";
            function updateData() {
                document.getElementById("data").innerHTML = data + " - "+ status+"... ";
            }
            function startClock() { status="running"; }
            function stopClock()  { status="stopped!"; }
           
        </script>
    </head>
    <body>
        <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="0" height="0" align="baseline" codebase="http://java.sun.com/products/plugin/1.2.2/jinstall-1_2_2-win.cab#Version=1,2,2,0">
            <PARAM NAME="code" VALUE="UrApplet.class">
            <PARAM NAME="scriptable" VALUE="true">
        </OBJECT>
        <form>
            <span style="margin:3px; border:2px #0000ff solid;" id="data">test</span>
            <input type="button" onClick="java script:startClock()" value="START"/>
            <input type="button" onClick="java script:stopClock()" value="STOP"/>
        </form>
    </body>
</html>

Det hele kunne måske nok gøres lidt mere elegant (og jeg er også ved at finde ud af, om jeg ikke kan få get/setMember til at virke i stedet for at tildele en værdi via eval - samt kalde metoder via Call)

Det er bl.a. derfor artiklen ikke er færdig endnu (du læser sikker dette Medions :-)

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
21. januar 2003 - 10:52 #2
Jeg fik oprindeligt ideen i forbindelse med et andet eksperten-spørgsmål (http://www.eksperten.dk/spm/301871)
Avatar billede bearhugx Nybegynder
21. januar 2003 - 11:15 #3
bemærk, at jeg ikke her kalder en java-funktion fra JS...

Du kan dog gøre det ved følgende :
- giv Object-taget en id ( <object id="urApplet" ...> )
- sætte <PARAM NAME="mayscript" value="true">
- i javascript-koden kald metoden detteErEnEllerAndenMetode() med document.getElementById("urApplet").detteErEnEllerAndenMetode();

BEMÆRK : at metoder, som skal kunne kaldes fra JS _skal_ være public!

/Søren
Avatar billede thinge Nybegynder
21. januar 2003 - 11:23 #4
Det første eksempel tror jeg at jeg kan bruge, dog har jeg samme problem som du har, nemlig at sende en parameter, direkte fra JS.
Men jeg synes det er en kanon "FUSKET" måde at hente en parameter på!
Spørgsmål:
netscape.javascript.* skal den importeres hvis man skal bruges JSObject
Avatar billede bearhugx Nybegynder
21. januar 2003 - 11:32 #5
JA! -- Og den findes som skrevet i jaws.jar (søg evt. efter filen - den er en del af JRE-distributionen (Runtime))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB