2

私が使用しているこのコードスニペットについて疑問に思っています:

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.htmlWebView


jsobj = (JSObject) webEngine.executeScript("window");JSObject
jsobj

WebViewwindow 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 worldwindow objectDataModel.class

4

1 に答える 1

3

このサイトによるとwebEngine.executeScript("window") 、実際には JavaScript Window オブジェクトが返されます。他にもたくさんのコード スニペット グッズがあります。

javaこの場合は、Window オブジェクト内で JavaScript によって使用できるハンドラーです。したがって、JavaScript は、参照時javaにオブジェクトへのアクセスを期待できDataModelます。

また、通常location.reload()は JavaScript を使用してページを更新します。

リロードの間に状態を保存する場合は、現在の HTML をキャプチャし、リロードが完了したときにWebView のloadContent 機能を使用する必要があります。WebView のドキュメントを取得して、任意のレベルでノードを直接変更することもできます。

于 2016-04-13T13:38:34.533 に答える