von Applet auf JavaScript aufrufen

mefir

mefir

Mitglied
Thread Starter
Dabei seit
05.10.2005
Beiträge
36
Reaktionspunkte
1
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.
 
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!
 
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" ?
 
Bin kein Java-Experte aber möglicherweise ist deine Java-Version zu alt?
 
acid schrieb:
Bin kein Java-Experte aber möglicherweise ist deine Java-Version zu alt?

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.
 
1.) testest du das über file:// oder //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.
 
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.
 
Über //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?
 
Zurück
Oben Unten