import javafx.application.Application; 
import static javafx.application.Application.launch; 
import javafx.application.Platform; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.concurrent.Worker; 
import javafx.scene.Scene; 
import javafx.scene.layout.Region; 
import javafx.scene.paint.Color; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 
import netscape.javascript.JSObject; 


public class MainApp extends Application { 
    private Stage stage; 
     
    @Override 
    public void start(Stage stage) throws Exception { 
        this.stage = stage; 
        this.stage.setTitle("Test"); 
        this.stage.setScene(new Scene(new WebPage(this),1350,750, Color.web("#666970"))); 
        
        stage.show(); 
    } 
     
    public class WebPage extends Region { 
        final WebView browser = new WebView(); 
        final WebEngine webEngine = browser.getEngine(); 
         
        public WebPage(final Application main) { 
            getChildren().add(browser); 
            webEngine.loadContent("</div><br /><div onClick='app.exit();' width='100' height='50'>" + 
                                  "Exit</div>"); 

            webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { 
                @Override 
                public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State state, Worker.State newState) { 
                    if (newState.equals(Worker.State.SUCCEEDED)) { 
                        JSObject win = (JSObject) webEngine.executeScript("window"); 
                        win.setMember("app", new App()); 
                    } 
                } 
            }); 
        } 
    } 
     
    public class App { 
        public void exit() { 
            Platform.exit(); 
        } 
    } 

    public static void main(String[] args) { 
        launch(args); 
    } 
} 