私が使用しているこのコードスニペットについて疑問に思っています:
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()
}
この行は、 myを にwebEngine.load(getClass().getResource("index.html").toExternalForm());
ロードします。これは単一ページのアプリケーションなので、これで十分です。これ以上質問する必要はありません。タイトルの質問に戻ります:
この行は、 w3school で定義されているように、「ウィンドウ オブジェクト」への参照を設定しますか? ブラウザで開いているウィンドウを表すwindow オブジェクトと等しいことを意味しますか?
もしそうなら: のコンテキスト メニューで [ページのリロード] を使用すると、新しい が生成されるため、アプリケーションが動作しないのはこのためでしょうか?
おまけの質問: 私の JavaScript では、is "java" hereを使用してモデルにアクセスできますindex.html
WebView
jsobj = (JSObject) webEngine.executeScript("window");
JSObject
jsobj
WebView
window object
java.methodName();
識別子または私はそれをどのように呼ぶでしょうか? これは正確にはinstanceではないので、このようには呼びません。
編集:これは私のJavaクラスです:
public class DataModel{
public void alert(String msg) {
System.out.println(msg);
}
}
に埋め込まれている私の JavaScript から、printindex.html
を呼び出すことができます。モデル参照をJavaScriptのすべての関数に渡しているため、 . JavaScript の観点から: 「Java」です。識別子、参照、インスタンス、...?java.alert("hello world");
hello world
window object
DataModel.class