如何在javaFX中从webView获取SelectedText

如何在javaFX中从webView获取SelectedText,java,webview,javafx,Java,Webview,Javafx,我需要从javaFX中的webView获取所选文本。我在互联网上找不到任何线索。这可以通过JavaScript实现: String selection = (String) webView.getEngine() .executeScript("window.getSelection().toString()"); System.out.println(selection); 此外,您可能会发现这一点很有帮助: 由jewelsea提供的组合解决方案:

我需要从javaFX中的webView获取所选文本。我在互联网上找不到任何线索。这可以通过JavaScript实现:

String selection = (String) webView.getEngine()
                     .executeScript("window.getSelection().toString()");
System.out.println(selection);
此外,您可能会发现这一点很有帮助:


由jewelsea提供的组合解决方案: 并通过:

可以从JAVAFX Webview中提取所选文本和HTML源代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package SelectInWebview;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.VBox;
import javafx.scene.web.HTMLEditor;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class SelectionHTMLExtractor extends Application {

    public static final String HTML
            = "<p><em>\"Do not judge me by my successes, judge me by how many times I fell down and got back up again.\"</em></p>"
            + "&nbsp;&nbsp&nbsp&nbsp;-&nbspNelson Rolihlahla Mandela";

    public static final String SELECT_TEXT
            = "(function getSelectionText() {\n"
            + "    var text = \"\";\n"
            + "    if (window.getSelection) {\n"
            + "        text = window.getSelection().toString();\n"
            + "    } else if (document.selection && document.selection.type != \"Control\") {\n"
            + "        text = document.selection.createRange().text;\n"
            + "    }\n"
            //            + "    if (window.getSelection) {\n"
            //            + "      if (window.getSelection().empty) {  // Chrome\n"
            //            + "        window.getSelection().empty();\n"
            //            + "      } else if (window.getSelection().removeAllRanges) {  // Firefox\n"
            //            + "        window.getSelection().removeAllRanges();\n"
            //            + "      }\n"
            //            + "    } else if (document.selection) {  // IE?\n"
            //            + "      document.selection.empty();\n"
            //            + "    }"
            + "    return text;\n"
            + "})()";

    public static final String SELECT_HTML
            = "(getSelectionHTML = function () {\n"
            + "      var userSelection;\n"
            + "      if (window.getSelection) {\n"
            + "        // W3C Ranges\n"
            + "        userSelection = window.getSelection ();\n"
            + "        // Get the range:\n"
            + "        if (userSelection.getRangeAt)\n"
            + "          var range = userSelection.getRangeAt (0);\n"
            + "        else {\n"
            + "          var range = document.createRange ();\n"
            + "          range.setStart (userSelection.anchorNode, userSelection.anchorOffset);\n"
            + "          range.setEnd (userSelection.focusNode, userSelection.focusOffset);\n"
            + "        }\n"
            + "        // And the HTML:\n"
            + "        var clonedSelection = range.cloneContents ();\n"
            + "        var div = document.createElement ('div');\n"
            + "        div.appendChild (clonedSelection);\n"
            + "        return div.innerHTML;\n"
            + "      } else if (document.selection) {\n"
            + "        // Explorer selection, return the HTML\n"
            + "        userSelection = document.selection.createRange ();\n"
            + "        return userSelection.htmlText;\n"
            + "      } else {\n"
            + "        return '';\n"
            + "      }\n"
            + "    })()";

    @Override
    public void start(Stage stage) throws Exception {
        HTMLEditor wisdom = new HTMLEditor();
        wisdom.setHtmlText(HTML);

        Label selectedText = new Label();
        Label selectedHTMLSource = new Label();

        Button selectText = new Button("Get TEXT Selection");
        selectText.setOnAction(event -> {
            WebView webView = (WebView) wisdom.lookup("WebView");
            if (webView != null) {
                WebEngine engine = webView.getEngine();
                Object selection = engine.executeScript(SELECT_TEXT);

                if (selection instanceof String) {
                    selectedHTMLSource.setText((String) selection);
                }
            }
        });
        Button selectHTML = new Button("Get HTML Selection");
        selectHTML.setOnAction(event -> {
            WebView webView = (WebView) wisdom.lookup("WebView");
            if (webView != null) {
                WebEngine engine = webView.getEngine();
                Object selection = engine.executeScript(SELECT_HTML);

                if (selection instanceof String) {
                    selectedText.setText((String) selection);
                }
            }
        });

        VBox layout = new VBox(
                10,
                new ToolBar(selectHTML, selectText),
                selectedText, selectedHTMLSource,
                wisdom
        );
        layout.setAlignment(Pos.CENTER);
        layout.setPadding(new Insets(10));

        stage.setTitle("SelectionHTMLExtractor");
        stage.setScene(new Scene(layout));
        stage.show();
    }

    public static void main(String[] args) {
        launch(SelectionHTMLExtractor.class);
    }

}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
在WebView中选择包;
导入javafx.application.application;
导入javafx.geometry.Insets;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.ToolBar;
导入javafx.scene.layout.VBox;
导入javafx.scene.web.HTMLEditor;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
公共类选择Htmlextractor扩展应用程序{
公共静态最终字符串HTML
=“\”不要以我的成功来评判我,而要以我跌倒又爬起来的次数来评判我。\“

” +“纳尔逊·罗利赫拉·曼德拉”; 公共静态最终字符串选择\u文本 =“(函数getSelectionText(){\n” +“变量文本=\”\“;\n” +“如果(window.getSelection){\n” +“text=window.getSelection().toString();\n” +“}如果(document.selection&&document.selection.type!=“Control\”{\n” +“text=document.selection.createRange().text;\n” +“}\n” //+“如果(window.getSelection){\n” //+“如果(window.getSelection().empty){//Chrome\n” //+“window.getSelection().empty();\n” //+“}else if(window.getSelection().removeAllRanges){//Firefox\n” //+“window.getSelection().removeAllRanges();\n” //+“}\n” //+“}如果(document.selection){//IE?\n” //+“document.selection.empty();\n” // + " }" +“返回文本;\n” + "})()"; 公共静态最终字符串选择\u HTML =“(getSelectionHTML=函数(){\n” +“var userSelection;\n” +“如果(window.getSelection){\n” +“//W3C范围\n” +“userSelection=window.getSelection();\n” +“//获取范围:\n” +“如果(userSelection.getRangeAt)\n” +“var range=userSelection.getRangeAt(0);\n” +“否则{\n” +“var range=document.createRange();\n” +range.setStart(userSelection.anchorNode,userSelection.anchorOffset);\n +range.setEnd(userSelection.focusNode,userSelection.focusOffset);\n +“}\n” +“//和HTML:\n” +“var clonedSelection=range.cloneContents();\n” +“var div=document.createElement('div');\n” +“div.appendChild(克隆选择);\n” +“返回div.innerHTML;\n” +“}如果(document.selection){\n” +//资源管理器选择,返回HTML\n +“userSelection=document.selection.createRange();\n” +“返回userSelection.htmlText;\n” +“}其他{\n” +返回“”;\n +“}\n” + " })()"; @凌驾 public void start(Stage)引发异常{ HTMLEditor WITH=新的HTMLEditor(); 智慧.setHtmlText(HTML); 标签selectedText=新标签(); 标签selectedHTMLSource=新标签(); 按钮选择文本=新建按钮(“获取文本选择”); 选择text.setOnAction(事件->{ WebView WebView=(WebView)wisdom.lookup(“WebView”); if(webView!=null){ WebEngine=webView.getEngine(); 对象选择=engine.executeScript(选择文本); 如果(字符串的选择实例){ selectedHTMLSource.setText((字符串)选择); } } }); 按钮选择HTML=新建按钮(“获取HTML选择”); 选择html.setOnAction(事件->{ WebView WebView=(WebView)wisdom.lookup(“WebView”); if(webView!=null){ WebEngine=webView.getEngine(); 对象选择=engine.executeScript(选择HTML); 如果(字符串的选择实例){ selectedText.setText((字符串)选择); } } }); VBox布局=新的VBox( 10, 新工具栏(选择HTML,选择文本), selectedText,selectedHTMLSource, 智慧 ); 布局。设置对齐(位置中心); 布局。设置填充(新插图(10)); stage.setTitle(“SelectionHTMLExtractor”); 舞台场景(新场景(布局)); stage.show(); } 公共静态void main(字符串[]args){ 启动(选择htmlextractor.class); } }