2013-10-17 24 views
6

Ich versuche, eine JavaScript-Funktion von einem JavaFX WebView auf einem JavaFX-Schaltfläche Klickereignis aufzurufen.So rufen Sie eine JavaScript-Funktion von einem JavaFX-WebView bei Klick auf die Schaltfläche auf?

ich den folgenden Code verwenden, aber es funktioniert nicht:

try { 
    File file = new File("F:\\inputfile\\hello.htm"); 

    WebEngine webengine = webview.getEngine(); 
    webengine.load(file.toURI().toURL().toString()); 
} catch(Exception ex) { 
    ex.printStackTrace(); 
} 

auf einem beliebigen Taste klicken ich die test() JavaScript-Methode in der HTML-Datei ausgeführt werden soll:

webengine.executeScript("test()"); 

Und die JavaScript-Methode in HTML-Datei ist:

<script language="javascript"> 
    function test() 
    { 
    window.scrollBy(0, 20); 
    } 
</script> 

Antwort

8

Ich habe Ihren Code wie folgt und es wo rks

package org.im.oor; 

import java.io.File; 
import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.StackPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

/** 
* 
* @author maher 
*/ 
public class main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("fire JS"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       if (webengine != null) 
       { 
        webengine.executeScript("test()"); 
       } 
      } 
     }); 

     publishServices(); 
     StackPane root = new StackPane(); 
//  root.getChildren().add(btn); 
     HBox hh = new HBox(); 
     hh.getChildren().add(btn); 
     hh.getChildren().add(webview); 


     root.getChildren().add(hh); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
    private WebEngine webengine; 
    private static WebView webview; 

    private void publishServices() { 



     try { 
      webview = new WebView(); 
      webview.setVisible(true); 
      webengine = webview.getEngine(); 
      webengine.setJavaScriptEnabled(true); 
      File file = new File("c:\\hello.html"); 
      System.out.println(file.exists() + " file exitence"); 
      webengine.load(file.toURI().toURL().toString()); 
     } catch (Exception ex) { 
      System.err.print("error " + ex.getMessage()); 
      ex.printStackTrace(); 
     } 




    } 


    /** 
    * The main() method is ignored in correctly deployed JavaFX application. 
    * main() serves only as fallback in case the application can not be 
    * launched through deployment artifacts, e.g., in IDEs with limited FX 
    * support. NetBeans ignores main(). 
    * 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Inhalt von c: \ hello.html

<html> 
<header> 
<script language="javascript"> 
function test() 
{ 
    //window.scrollBy(0,20); 
    document.body.style.backgroundColor="#00f3f3"; 
    alert('test'); 

} 
</script> 
</header> 
<body>test 
<a href='#' onclick="test();">fire for test</a> 
</body> 
</html> 

Überprüfung dieser Code und lassen Sie mich wissen .. nur einige Punkte auf, dass:

  • Scheck, wenn Sie können wirklich Zugriff auf diese Datei ..

  • machen Sie Programm einfach zu testen, wenn es wor König JS < ==> JavaFX, dann können Sie weiter gehen und erweiterte JS-Funktionen verwenden

Verwandte Themen