2013-11-28 232 views
2

我在SampleController.java中使用FXML WebView來顯示網頁內容。現在的問題是如何在html文件中調用javascript的java函數,或者當點擊webview網頁時應該執行javascript並調用Bridge()中的代碼來執行。有一些JavaFX WebView的示例,但找不到FXML WebView的任何示例。JavaScript上傳到JavaFX FXML

public class SampleController implements Initializable { 

    @FXML Button write, read; 
    @FXML ToolBar toolbar; 
    @FXML WebView webview; 
    WebEngine webEngine; 
    JSObject window; 

    @FXML 
    private void setText(MouseEvent e){ 
     webEngine.executeScript("writeText()"); 
    } 
    @FXML 
    private void getText(MouseEvent e){ 
     String str = (String) webEngine.executeScript("readText()"); 
     System.out.println(str); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     webEngine = webview.getEngine(); 
     webEngine.load(getClass().getResource("test.html").toString()); 

    webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { 
    @Override 
    public void changed(ObservableValue<? extends State> ov, State t, State t1) { 
     if (t1 == Worker.State.SUCCEEDED) { 
      window = (JSObject) webEngine.executeScript("window"); 
      window.setMember("app", new Bridge()); 

     } 
    } 
});  
    }  
} 

    // code for javaScript call 

    public class Bridge { 
    public void exit() { 
     Platform.exit(); 
    } 

    public void display(String str){ 
     System.out.println(str); 
    } 
} 

// Here is HTML with with javaScript 
    <!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <script> 
      function writeText(){ 
       document.getElementById("div1").innerHTML = "New text!"; 
      } 
      function readText(){ 
       var str = document.getElementById("div2").innerHTML; 
       return str; 
      } 

     </script> 
    </head> 
    <body> 
     <div id="div1">Urdu Books<img src="book.png" alt="book"></div> 
     <div id="div2">Here is a text for you!</div> 
     <div id="div3"></div> 
     <p>Click <a href="#" onclick="java.exit()">here </a>to exit the application 
     <p>Click <a href="#" onclick="java.display('This is value')"> Display </a> a value 
    </body> 
</html> 

回答

0

WHE這樣window.setMember("app", new Bridge());你基本上告訴JS引擎來設置一個新的大橋對象作爲你的窗口對象的app成員。

現在在您的JavaScript代碼中,您可以調用您的橋接方法,如window.app.exit()或更簡單app.exit()作爲window是全局對象。