von Applet auf JavaScript aufrufen

Diskutiere mit über: von Applet auf JavaScript aufrufen im Mac OS X Entwickler, Programmierer Forum

  1. mefir

    mefir Thread Starter MacUser Mitglied

    Beiträge:
    36
    Zustimmungen:
    1
    Registriert seit:
    05.10.2005
    Gibt eine Möglichkeit aus einem Applet unter MacOSX auf JavaScript zuzugreifen? Unter Windows kann man das ja mit netscape.javascript.JSObject, aber unter OSX funktioniert das irgendwie nicht.
    Ich brauche das um den Status eines Applets zu speichern ohne das es direkten Zugriff auf das System bekommt.
     
  2. ybasket

    ybasket MacUser Mitglied

    Beiträge:
    325
    Zustimmungen:
    3
    Registriert seit:
    17.01.2006
    netscape.javascript.JSObject sollte auch unter os x funktionieren,findet er die Klasse überhaupt, d.h. kannst du diese Klasse denn per Reflection laden?

    Bricht er beim Aufruf oder beim eigentlichen JavaScript ab (verwendest du ein Windows/IE spezifisches Script?)?

    poste doch mal Code!
     
  3. mefir

    mefir Thread Starter MacUser Mitglied

    Beiträge:
    36
    Zustimmungen:
    1
    Registriert seit:
    05.10.2005
    Code:
    package mefir.j4.properties;
    
    import java.applet.Applet;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    import java.util.TimeZone;
    
    import mefir.j4.Debug;
    import netscape.javascript.JSObject;
    
    public class PropApplet implements PropObject{
    	public PropApplet(Applet applet) throws Exception{
    		this.applet = applet;
    		format = new SimpleDateFormat("EE, dd-MMM-yy HH:mm:ss zz", new Locale("en","US"));
    		format.setTimeZone(TimeZone.getTimeZone("GMT"));
    		doc = (JSObject) (JSObject.getWindow(applet)).getMember("document");
    	}
    	
    	Applet applet;
    	JSObject doc; 
    	String name = "mefir_j4_prefs";
    	long time = 1000L * 3600L * 24L * 365L * 10L; 
    	DateFormat format;
    	
    	
    	public String load() {
    		try{
    			return this.getCookie();
    		}catch(Throwable t){
    			Debug.println(t);
    			return "";
    		}
    	}
    
    	public void save(String s) {
    		try{
    			this.setCookie(s);
    		}catch(Throwable t){
    			Debug.println(t);
    		}
    	}
    	
    	void setCookie(String value)throws Exception{
    		Date d = new Date(System.currentTimeMillis() + time);
    		String cookie = name+"="+value+"; expires="+format.format(d);
    		doc.setMember("cookie", cookie);
    	}
    	
    	String getCookies() throws Exception{
    		return (String) doc.getMember("cookie");
    	}
    	
    	String getCookie()throws Exception{
    		String cookie = getCookies();
    		String search = this.name+"=";
    		if(cookie.length() > 0){
    			int off = cookie.indexOf(search);
    			if(off !=-1){
    				off+=search.length();
    				int end = cookie.indexOf(";",off);
    				if(end == -1) end = cookie.length();
    				return cookie.substring(off,end);
    			}
    		}
    		return "";
    	}
    
    	
    }
    
    Da JSObject nicht gefunden wird, wird das PropApplet-Objekt nicht erzeugt und das Speichern läuft dann leider nicht.
    Unter Winows läuft das fehlerfrei, leider ist das Programm hauptsächlich für Macs gedacht.
    Was meinst du mit "per Reflection laden" ?
     
  4. acid

    acid MacUser Mitglied

    Beiträge:
    472
    Zustimmungen:
    0
    Registriert seit:
    18.08.2005
    Bin kein Java-Experte aber möglicherweise ist deine Java-Version zu alt?
     
  5. mefir

    mefir Thread Starter MacUser Mitglied

    Beiträge:
    36
    Zustimmungen:
    1
    Registriert seit:
    05.10.2005
    Auf meinem PC habe ich Java1.4 auf dem Mac 1.5. Das Programm ist so ausgelegt, dass es eigentlich ab Java1.3 problemlos laufen sollte.
     
  6. oglimmer

    oglimmer MacUser Mitglied

    Beiträge:
    1.124
    Zustimmungen:
    79
    Registriert seit:
    16.11.2004
    1.) testest du das über file:// oder http://localhost ? ich meine dass gerade der Safari hier sich anders verhält. ich würde auf jeden fall http:// verwenden.

    2.) du könntest noch mal versuchen über (Beispielcode)
    PHP:
    void setCookie(String value) {
        
    jso.eval("document.cookie = 'Name="+value+"; expires=Wed, 11 Nov 2009 12:00:00 GMT';");
    }

    String getCookie() {
        return (String) 
    jso.eval("document.cookie");
    }
    die Cookies zu setzten. Das funkt 100% auf OS X mit Safari.
     
  7. ybasket

    ybasket MacUser Mitglied

    Beiträge:
    325
    Zustimmungen:
    3
    Registriert seit:
    17.01.2006
    Reflection ist die Möglichkeit in Java Klassen zur Laufzeit nachzuladen. Diese Methode eignet sich u.a. auch dazu, das Vorhandensein und korrekte Funktionieren einer Klasse zur Laufzeit zu testen. Vielleicht hast du auch schon mal beim Umgang mit Datenbanken folgenden Code gesehen:

    Class.forName( "[Name des JDBC-Treibers]").newInstance();

    Das ist ein bekanntes Beispiel für das Laden von Klassen zur Laufzeit, mehr zum Thema Reflection in der allseits bekannten Java Insel.

    Zum konkreten Problem würde ich mich an deiner Stelle an die vorangegangenen Ratschläge halten.
     
  8. mefir

    mefir Thread Starter MacUser Mitglied

    Beiträge:
    36
    Zustimmungen:
    1
    Registriert seit:
    05.10.2005
    Über http://localhost funktionierts.
    Das Dumme ist nur, dass das Applet in einem Widget läuft und somit leider nicht mit http aufgerufen wird.
    Kann man den Aufruf der Haupt-HTML-Datei in einem Widget über http erzwingen?
     
Die Seite wird geladen...
Ähnliche Themen - Applet auf JavaScript Forum Datum
iTunes Connect Status: warten auf Prüfung Mac OS X Entwickler, Programmierer Mittwoch um 14:35 Uhr
Java Applet Problem Mac OS X Entwickler, Programmierer 17.02.2009
Java-Applet erstellen, Design-Assistenten für Java in Xcode? Mac OS X Entwickler, Programmierer 19.09.2007
Von JFrame zu Applet Mac OS X Entwickler, Programmierer 23.11.2006
Java Applet Problem Mac OS X Entwickler, Programmierer 12.07.2005

Diese Seite empfehlen

Benutzerdefinierte Suche