当前位置: 首页 > 面试题库 >

使用javafx从webview获取内容

上官鸿晖
2023-03-14
问题内容

我正在使用JAVAFX控件开发一个swing应用程序。在我的应用程序中,我必须打印出Webview中显示的html页面。我正在尝试的是借助HtmlDocuement将Webview的html内容加载为字符串。

要从Web视图加载html文件的内容,我正在使用以下代码,但无法正常工作:

try
{
    String str=webview1.getEngine().getDocment().Body().outerHtml();
}
catch(Exception ex)
{
}

问题答案:

WebEngine.getDocument返回org.w3c.dom.Document,而不是您希望通过代码判断的JavaScript文档。

不幸的是,打印出来org.w3c.dom.Document需要大量的编码。您可以尝试以下解决方案:将org.w3c.dom.Document漂亮地打印到stdout的最短方法是什么?,请参见下面的代码。

请注意,您需要等到文档加载后才能使用Document。这就是为什么LoadWorker在这里使用它:

public void start(Stage primaryStage) {
    WebView webview = new WebView();
    final WebEngine webengine = webview.getEngine();
    webengine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
                public void changed(ObservableValue ov, State oldState, State newState) {
                    if (newState == Worker.State.SUCCEEDED) {
                        Document doc = webengine.getDocument();
                        try {
                            Transformer transformer = TransformerFactory.newInstance().newTransformer();
                            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
                            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
                            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

                            transformer.transform(new DOMSource(doc),
                                    new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            });
    webengine.load("http://stackoverflow.com");
    primaryStage.setScene(new Scene(webview, 800, 800));
    primaryStage.show();
}


 类似资料:
  • 问题内容: 如何获取JavaFx中Webview控件的文档高度? 问题答案: 您可以使用以下调用获取WebView中显示的文档的高度: 演示呼叫使用情况的完整应用程序: 上面的答案的来源:Oracle JavaFX论坛WebView配置线程 。 针对基于Java的API的相关功能的相关问题跟踪器请求: RT-25005 WebView的自动首选大小。

  • 本文向大家介绍iOS获取cell中webview的内容尺寸,包括了iOS获取cell中webview的内容尺寸的使用技巧和注意事项,需要的朋友参考一下 最近项目中遇到在cell中获取webView的内容的尺寸的需求 实现的思路其实很简单 就是通过执行js 获取尺寸即可 为了后面用着方便我直接封装了一个HTML的cell 起名就叫  STHTMLBaseCell 下面是实现代码: 以上是.h文件的实

  • 问题内容: 我已经为两个窗口/阶段编写了一个控制器。在MainClass中打开第一个窗口。如果用户单击按钮,则控制器中的第二个按钮。如何在applyFor()方法中从second.fxml获取TextFields? 谢谢。 问题答案: 在fxml之间共享控制器不是很好,除非它们具有相同的用途。在这里,这两个fxml似乎有不同的用途(帐户管理,登录或其中一个类似,并为另一个创建新帐户)。更糟糕的是,

  • 我已经在Eclipse SWT应用程序中嵌入了JavaFX的WebView,需要加载html内容。我需要阻止当前线程的执行,直到webengine加载完内容。任何熟悉这种情况并能给出一些提示和/或最佳实践来实现这一点的人?SWT和JavaFX似乎都在同一个UI线程中运行。 谢谢

  • 我想从我的TableCell中的模型中获取一个属性,因此我可以根据该属性对单元格进行修改,让我们看一下以下示例: 我有这样一个模型: 这个模型只是我所拥有的模型的一个模拟,我有几个模型有两个或更多的

  • 我正在使用场景构建器构建一个Java应用程序的GUI。对于每个元素,我都给了它一个,以便以后可以引用它们。我需要在它的许多元素上使用,例如: 这对除s之外的大多数元素都有效。当我尝试以下操作时,Eclipse告诉我“不能从强制转换到”,但它不起作用。 我看到只扩展了,因此它不能从强制转换。如何使用取回? 注意:我知道我可以使用FXML的,但我希望使用Lambda函数并保持事件处理代码的相同风格。