私は私が使用している、このコードスニペットについて思ったんだけど:JavaFX8 WebEngineのexecuteScript( "window")メソッドはJavaScriptのウィンドウオブジェクトを参照していますか?
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()
}
この行を私のindex.html
WebView
にwebEngine.load(getClass().getResource("index.html").toExternalForm());
ロード。それは単一のページのアプリケーションなので、それだけで必要なことですが、それ以上の質問はありません。タイトルに戻って質問に取得するには今すぐ
:
は、この行を行います。jsobj = (JSObject) webEngine.executeScript("window");
は"window object" as it's defined by w3schoolにJSObject
の参照を設定しますか? jsobj
がウィンドウオブジェクトと等しいことを意味すると、はブラウザの開いたウィンドウを表します?
もしWebView
のコンテキストメニューより "リロードページ"を使用した場合、私のアプリケーションが動作しないのは、window object
という新しいものが生成されるからでしょうか?
私のJavaScriptでは、java.methodName();
は「java」、という識別子はとなります。どのように呼びますか?それはちょうどインスタンスではないので、私はこれをこのように呼んでいません。
編集: これは私のJavaクラスです:index.html
に埋め込まれたJavaScriptの私から、
public class DataModel{
public void alert(String msg) {
System.out.println(msg);
}
}
私はhello world
を印刷するjava.alert("hello world");
を呼び出すことができます。私のモデルリファレンスをwindow object
に渡しているので、私のJavaScriptのすべての関数はDataModel.class
にアクセスできます。 JavaScriptの観点からは、「java」です。識別子、参照、インスタンス、...?
オリジナルの投稿を編集しました。ありがとうございます! :) –
JavaScriptを使用して呼び出すと、JavaFXを介してメモリ内のクラスインスタンスを操作する(したがって、指定したmsgと一緒に警告を呼び出す)DataModelクラスのインスタンスへの参照がJavaで記述されることをお勧めします。私が提供したリンクを使って、「JavaScriptからJavaFXへのUpcallsの作成」を参照してください。 –
これは私が尋ねたすべての答えです、ありがとう –