Webview 如何在JavaFX应用程序中处理HTML表单

Webview 如何在JavaFX应用程序中处理HTML表单,webview,javafx-2,javafx-8,javafx-webengine,Webview,Javafx 2,Javafx 8,Javafx Webengine,有人能帮助我如何在JavaFX中捕获HTML按钮的onclick事件吗? 单击该按钮时,javascript警报应显示,我可以在小程序窗口上显示HTML页面,但onClick事件不起作用 HTML: <html lang="en"> <head> <title>WebView</title> <link rel="stylesheet" type="text/css" href="help.css"> <s

有人能帮助我如何在JavaFX中捕获HTML按钮的onclick事件吗? 单击该按钮时,javascript警报应显示,我可以在小程序窗口上显示HTML页面,但onClick事件不起作用

HTML:

<html lang="en">
<head>
    <title>WebView</title>
    <link rel="stylesheet" type="text/css" href="help.css">
    <script>
        function buttonClick() {
            alert("Button Clicked");
        }
    </script>
</head>
<body>

<button onclick="buttonClick()">Submit</button>

</body>
</html>
类浏览器扩展区域{
专用HBox工具栏;
私有静态字符串[]图像文件=新字符串[]{
“help.png”
};
私有静态字符串[]标题=新字符串[]{
“帮助”
};
私有静态字符串[]URL=新字符串[]{
WebViewSample.class.getResource(“help.html”).toExternalForm()
};    
最终超链接[]hpls=新超链接[captions.length];
最终图像[]图像=新图像[imageFiles.length];
最终WebView浏览器=新WebView();
final-WebEngine-WebEngine=browser.getEngine();
最终组合框ComboBox=新组合框();
公共浏览器(){
//应用样式
getStyleClass().add(“浏览器”);
对于(int i=0;i
您没有看到任何内容的原因是您没有为
webEngine
定义
onAlert
处理程序。试试最简单的方法:

    // in the constructor of `Browser`
    webEngine.setOnAlert((WebEvent<String> event) -> {
        System.out.println("ALERT!!!! " + event.getData());
    });
  • 将其放置在页面上下文中:

    JSObject jsobj = (JSObject) webEngine.executeScript("window");
    jsobj.setMember("bridge", new Bridge());
    
  • 从JS事件处理程序调用它:

    function buttonClick() {
        bridge.doSomething();
    }
    
  • 一旦不再需要桥来删除它,请使用
    JSObject.removeMember()

  • 注意安全


  • 您没有看到任何内容的原因是您没有为
    webEngine
    定义
    onAlert
    处理程序。试试最简单的方法:

        // in the constructor of `Browser`
        webEngine.setOnAlert((WebEvent<String> event) -> {
            System.out.println("ALERT!!!! " + event.getData());
        });
    
  • 将其放置在页面上下文中:

    JSObject jsobj = (JSObject) webEngine.executeScript("window");
    jsobj.setMember("bridge", new Bridge());
    
  • 从JS事件处理程序调用它:

    function buttonClick() {
        bridge.doSomething();
    }
    
  • 一旦不再需要桥来删除它,请使用
    JSObject.removeMember()

  • 注意安全


  • 您没有看到任何内容的原因是您没有为
    webEngine
    定义
    onAlert
    处理程序。试试最简单的方法:

        // in the constructor of `Browser`
        webEngine.setOnAlert((WebEvent<String> event) -> {
            System.out.println("ALERT!!!! " + event.getData());
        });
    
  • 将其放置在页面上下文中:

    JSObject jsobj = (JSObject) webEngine.executeScript("window");
    jsobj.setMember("bridge", new Bridge());
    
  • 从JS事件处理程序调用它:

    function buttonClick() {
        bridge.doSomething();
    }
    
  • 一旦不再需要桥来删除它,请使用
    JSObject.removeMember()

  • 注意安全


  • 您没有看到任何内容的原因是您没有为
    webEngine
    定义
    onAlert
    处理程序。试试最简单的方法:

        // in the constructor of `Browser`
        webEngine.setOnAlert((WebEvent<String> event) -> {
            System.out.println("ALERT!!!! " + event.getData());
        });
    
  • 将其放置在页面上下文中:

    JSObject jsobj = (JSObject) webEngine.executeScript("window");
    jsobj.setMember("bridge", new Bridge());
    
  • 从JS事件处理程序调用它:

    function buttonClick() {
        bridge.doSomething();
    }
    
  • 一旦不再需要桥来删除它,请使用
    JSObject.removeMember()

  • 注意安全


  • 嗨,Nikos,我还有一个疑问,如果我有2个按钮和2个不同的JavaScript函数,我如何区分它们?单击Click函数按钮Click1(){alert(“单击的第一个按钮”);//bridge.doSomething();}函数按钮Click2(){alert(“单击的第二个按钮”);//bridge.doSomething();}相同的原理;e、 g.制作另一个对象,
    Bridge2
    ,-或在
    Bridge
    等中制作一个新方法
    doSomethingElse()
    。谢谢Nikos。1.如果我有一个像2这样的文本框,你能告诉我如何检索表单字段吗。如何使用内容从一个页面导航到另一个页面?这可以解决我所有的疑问。对于(1)你需要标准的Javascript操作-如果不确定最好问另一个问题。(2) 这也是另一个问题,你应该提供更多关于你到底想要什么的细节。标准HTML链接在很多情况下都能工作……嗨,Nikos,我还有一个疑问,如果我有2个按钮和2个不同的JavaScript函数,我如何区分它们?单击Click函数按钮Click1(){alert(“单击的第一个按钮”);//bridge.doSomething();}函数按钮Click2(){alert(“单击的第二个按钮”);//bridge.doSomething();}相同的原理;e、 g.制作另一个对象,
    Bridge2
    ,-或在
    BridgedoSomethingElse()