2016-04-13 4 views
2

私は私が使用している、このコードスニペットについて思ったんだけど: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.htmlWebViewwebEngine.load(getClass().getResource("index.html").toExternalForm());ロード。それは単一のページのアプリケーションなので、それだけで必要なことですが、それ以上の質問はありません。タイトルに戻って質問に取得するには今すぐ


は、この行を行います。jsobj = (JSObject) webEngine.executeScript("window");"window object" as it's defined by w3schoolJSObjectの参照を設定しますか?
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」です。識別子、参照、インスタンス、...?

答えて

3

this siteによると、webEngine.executeScript("window")実際にはは、JavaScript Windowオブジェクトを返します。見るべき他のコードスニペットもたくさんあります!

javaは、JavaScriptによってWindowオブジェクト内で使用できるハンドラです。あなたのJavaScriptは、javaを参照すると、DataModelオブジェクトにアクセスすることができます。

また、JavaScriptで通常location.reload()のページを更新したいとします。

リロードの間に状態を保存する場合は、現在のHTMLをキャプチャし、リロードが完了したらWebViewのloadContent functionalityを使用することをお勧めします。任意のレベルでノードを直接変更できるように、WebViewのドキュメントを入手することもできます。

+0

オリジナルの投稿を編集しました。ありがとうございます! :) –

+0

JavaScriptを使用して呼び出すと、JavaFXを介してメモリ内のクラスインスタンスを操作する(したがって、指定したmsgと一緒に警告を呼び出す)DataModelクラスのインスタンスへの参照がJavaで記述されることをお勧めします。私が提供したリンクを使って、「JavaScriptからJavaFXへのUpcallsの作成」を参照してください。 –

+0

これは私が尋ねたすべての答えです、ありがとう –

関連する問題