Ich frage mich, diesen Code-Schnipsel Ich verwende:Bezieht sich die Methode executeScript ("window") von JavaFX8 WebEngine auf das JavaScript-Fensterobjekt?
WebView webView = new WebView();
JSObject jsobj;
webEngine = webView.getEngine();
try {
webEngine.load(getClass().getResource("index.html").toExternalForm());
} catch (Exception e) {
e.printStackTrace();
}
try {
jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new DataModel());
} catch (Exception e) {
e.printStackTrace()
}
Diese Zeile webEngine.load(getClass().getResource("index.html").toExternalForm());
Lasten meine index.html
in die WebView
. Da es sich um eine Einzelseitenanwendung handelt, ist das alles, was ich brauche, und es gibt keine weiteren Fragen dazu.
Nun zurück auf die Frage im Titel zu erhalten:
Ist diese Zeile: jsobj = (JSObject) webEngine.executeScript("window");
stellen Sie den JSObject
Bezug auf die "window object" as it's defined by w3school?
Bedeutet, dass jsobj
nun gleich dem Fensterobjekt ist, dass das geöffnete Fenster im Browser darstellt?
Ist dies wahrscheinlich der Grund, warum meine Anwendung nicht funktioniert, wenn ich "Reload-Seite" über das Kontextmenü in der WebView
verwenden, da es eine neue window object
generieren würde?
Bonus Frage: In meinem JavaScript kann ich das Modell mit java.methodName();
zugreifen ist "Java" hier eine Kennung oder wie würde ich es nennen? Es ist nicht genau eine Instanz, also würde ich es nicht so nennen.
Edit: Das ist meine Java-Klasse:
public class DataModel{
public void alert(String msg) {
System.out.println(msg);
}
}
Von meinem JavaScript, das in index.html
eingebettet ist, ich java.alert("hello world");
hello world
drucken aufrufen können. Da ich die Modellreferenz an die window object
übergebe, hat jede Funktion in meinem JavaScript Zugriff auf die DataModel.class
. Aus der Sicht von JavaScript: Ist "Java". ein Bezeichner, eine Referenz, eine Instanz, ...?
Redigierte den ursprünglichen Beitrag, danke für Ihre Hilfe! :) –
Der beste Weg, es zu beschreiben, ist, dass Java eine Referenz auf eine Instanz der DataModel-Klasse ist, die, wenn sie über JavaScript aufgerufen wird, JavaFX durchtunnelt, um die Klasseninstanz im Speicher zu manipulieren (und somit alert zusammen mit der von Ihnen angegebenen Nachricht aufzurufen). Überprüfen Sie mit dem Link, den ich zur Verfügung gestellt habe, den Abschnitt "Making UpCalls von JavaScript zu JavaFX". –
Dies beantwortet alles, was ich gefragt habe, danke –