标签: javafx-webengine

JavaFX - 在Chrome浏览器中打开URL

我有一个仅在Chrome浏览器下工作的网址.我在webview中打开了一个url,但它无法正常工作.我收到以下错误.所以我想在Chrome浏览器中打开它.可能吗?如果是的话,请帮助我.

Code
 WebView browser = new WebView();

 WebEngine webEngine = browser.getEngine();

 System.out.println(webEngine);
 webEngine.load(url);

 Scene scene = new Scene(browser);
 stage.setScene(scene);
 stage.show();

Error

Jun 13, 2014 3:43:06 PM com.sun.webpane.webkit.network.URLLoader doRun
WARNING: Unexpected error
javax.net.ssl.SSLProtocolException: Extensions not allowed in v2 certificate
    at sun.security.ssl.HandshakeMessage$CertificateMsg.<init>(HandshakeMessage.java:451)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
    at com.sun.webpane.webkit.network.URLLoader.sendRequest(URLLoader.java:322)
    at com.sun.webpane.webkit.network.URLLoader.doRun(URLLoader.java:141)
    at com.sun.webpane.webkit.network.URLLoader.access$000(URLLoader.java:44)
    at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:106)
    at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:103)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.webpane.webkit.network.URLLoader.run(URLLoader.java:103)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at …
Run Code Online (Sandbox Code Playgroud)

javafx javafx-2 javafx-webengine

7
推荐指数
1
解决办法
8729
查看次数

JavaFX 17 之后,Leaflet 无法在 WebEngine 中工作

我有一个使用 JavaFX 16 制作的应用程序,其中包含一个 WebView,用于使用 Leaflet JS 库显示交互式地图。

当我尝试转换到 JavaFX 17 时遇到问题,交互式地图不再工作(无法移动或单击,但可以滚动)。我在使用 Leaflet 的 OpenStreetMap 网站的一个最小示例中重现了该错误:

package test;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage stage) {
        WebView webView = new WebView();
        webView.getEngine().load("https://www.openstreetmap.org/");
        Scene scene = new Scene(new StackPane(webView), 640, 480);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}
Run Code Online (Sandbox Code Playgroud)

OpenStreetMap 网站上的交互式地图已正确渲染,并且可以放大,但无法移动。

我正在使用 Gradle 下载 JavaFX,这是我的 build.gradle :

plugins {
    id 'application'
    id 'org.openjfx.javafxplugin' …
Run Code Online (Sandbox Code Playgroud)

java javafx leaflet javafx-webengine javafx-17

7
推荐指数
1
解决办法
869
查看次数

JavaFX WebEngine陷入"运行"状态

WebEngine在JavaFX2中使用时,我注意到它有时会卡住.假设我正在创建一个只在页面上找到超链接的爬虫,然后访问它们以递归方式执行相同操作,跟踪我们访问过的链接以及哪些链接已经在边界上.在运行我的代码时,执行有时会在任意时刻挂起.

我在听众的形式加入一些调试代码到我的项目workDoneProperty,并exceptionProperty通过印刷的每一个过渡loadWorkerstateProperty.然后我注意到有时引擎会停止中间加载一个URL(状态被卡住RUNNING并且没有更多workDone更新).我假设这是因为超时或某事,但我已经停止等待,看看它是否确实在5分钟后超时.

exceptionProperty似乎并没有产生任何事件,也不在webEngine过渡到FAILED或者CANCELLED,它只是停止.我想知道这是否可能是图书馆中的竞争条件,或者可能是我缺少的东西......有没有人遇到过这个谁知道如何解决这个问题?对我的应用来说,引擎不仅仅是随机停止......

编辑:从我的控制台添加输出:

Work done: -1
Engine Load Worker transitioning into state: READY
Work done: 0
Engine Load Worker transitioning into state: SCHEDULED
Engine Load Worker transitioning into state: RUNNING
Work done: 21
Work done: 24
Work done: 24
Work done: 57
Work done: 72
BUILD STOPPED (total time: 9 minutes 32 seconds)
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-webengine

6
推荐指数
1
解决办法
2336
查看次数

2022年如何调试JavaFX webview

如何调试 JavaFX Web 视图?我找到两种方法,

  1. 一种是将外部 chrome 调试器附加到 JavaFX webview。
  2. 另一种是注入firebug javascript。

Method#1 似乎使用了一些 hack,比如设置对私有字段的访问权限等。Method#2 依赖于 firebuglite,它现在似乎已经过时了。

2022年应该怎么做。还有其他方法,或者更好的方法吗?

我现在正在尝试 firebug lite 方法,并且已将 javascript 作为 Maven 项目的一部分,并尝试将其作为字符串而不是外部 URL 注入,因为 firebug 似乎现在没有正确地公开托管。

参考/sf/answers/1287783031/

这就是我现在所处的位置:

package xyz.jphil.internal_browser;

import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
import javafx.scene.web.WebEngine;
import netscape.javascript.JSObject;

/**
 *
 * @author Ivan
 */
public class WebkitDebugUtils {
    private static int resourcesPort = 0;

    public static void createHttpServerForLocalFiles() {
        int portStart = 64321, endPort = 65534;
        resourcesPort = portStart + (int) ((endPort * 1d …
Run Code Online (Sandbox Code Playgroud)

java javafx-webengine javafx-11 java-17

6
推荐指数
1
解决办法
1054
查看次数

JavaFX WebEngine等待ajax完成

我正在JavaFX中开发一个依赖于WebView(以及WebEngine)的数据挖掘应用程序.挖掘分两步进行:首先,用户使用UI导航到WebView中的网站,以配置可以搜索有趣数据的位置.其次,使用定期运行的后台任务,WebEngine加载相同的文档并尝试从加载的文档中提取数据.

这适用于大多数情况,但最近我遇到了使用AJAX呈现内容的页面遇到的麻烦.要检查是否已WebEngine加载文档,我听loadWorkerstateProperty.如果状态转换为successcesfull,我知道文档已加载(与可能在document.ready()上运行的任何javascript或等效文件一起).这是因为如果我没有弄错的话,javascript会在JavaFX线程上执行(来源:https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx).但是,如果启动了AJAX调用,则javascript执行完成,引擎让我知道文档已准备就绪,但显然不是因为优秀的AJAX调用内容可能仍然会发生变化.

有没有办法解决这个问题,注入一个钩子,以便在AJAX调用结束时通知我?我已经尝试安装一个默认的完整处理程序,$.ajaxSetup()但这很狡猾,因为如果ajax调用覆盖整个处理程序,则不会调用默认值.另外,我只能在首次加载文档后注入它(然后一些AJAX调用可能已经在运行).我已经使用upcall测试了这个注入,它适用于在命令上启动的AJAX调用(在注入默认处理程序之后),它们不提供自己的完整处理程序.

我正在寻找两件事:第一:挂钩到AJAX调用的完成处理程序的通用方法,其次:等待WebEngine完成所有AJAX调用并在事后通知我的方法.

ajax jquery javafx javafx-webengine

5
推荐指数
1
解决办法
2231
查看次数

JavaFX检测来自WebEngine的404响应

使用JavaFx WebEngine,如何检测是否存在404页面未找到错误.我已搜索但无法找到任何内容.有任何想法吗?或者有可能吗?

java javafx javafx-webengine

5
推荐指数
1
解决办法
1535
查看次数

为什么JavaScript方法在从JavaFX插入DOM时不会执行?

我有一个大量使用WebView的JavaFX应用程序.我试图将一个对象插入到JavaScript代码可以使用的DOM中,并且我需要在加载新页面时使用这些对象.

但是,当我运行程序时,FirebugLite会在DOM中显示对象,但函数不会执行.

根据一些Oracle文档,这似乎是提供从JavaScript到Java的上行调用的适当方式.我还看到一些StackOverflow帖子解释了同样的事情.

我错过了什么?我在Windows 7上使用Java 8,Update 51,64位.

Java的:

public class DemoApplication extends Application {

    Debug debug;

    @Override
    public void start(final Stage stage) throws Exception {
        debug = new Debug();

        WebView browser = new WebView();
        WebEngine webEngine = browser.getEngine();
        webEngine.getLoadWorker().stateProperty().addListener(
                new ChangeListener<Worker.State>() {
                    @Override
                    public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
                        if (newValue == Worker.State.SUCCEEDED) {
                            JSObject windowObject = (JSObject) webEngine.executeScript("window");
                            windowObject.setMember("Debug", debug);
                        }
                    }
                }
        );
        webEngine.load("http://localhost:8080/page1.html");

        stage.setScene(new Scene(browser));
        stage.show();
    }

} …
Run Code Online (Sandbox Code Playgroud)

javascript java javafx-8 javafx-webengine

5
推荐指数
1
解决办法
1928
查看次数

在Java 8u60中的WebView中加载本地JavaScript文件

在Java 8u51之前,以下工作正常:

  • 有一个HTML文件包含 <script src="javascript.js"></script>
  • 将此HTML文件加载到WebView中
  • 调用javascript.jsusing中包含的函数webView.getEngine().executeScript()

切换到8u60后,它不再有效:

Exception in thread "JavaFX Application Thread" netscape.javascript.JSException: TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)

因此javascript.js不再加载该文件.从IDE启动时起作用,其中JavaScript文件位于文件系统上.但是,在应用程序打包时不再有效,因此javascript.js位于JAR文件中.

知道改变了什么以及如何解决这个问题?

java javafx-webengine

5
推荐指数
1
解决办法
3335
查看次数

如何在WebView中以编程方式使用基本身份验证 - JavaFX

我正在开发一个JavaFX应用程序,我正在尝试使用WebView访问Web应用程序.此Web应用程序具有基本身份验证,我想以编程方式提交凭据(不想提示用户提供凭据,它们存储在JavaFX应用程序中,我知道此方法的安全隐患).

我在谷歌找到的唯一链接是:

https://community.oracle.com/message/12518017

还没有答案.

javafx javafx-2 javafx-webengine

5
推荐指数
1
解决办法
1333
查看次数

JavaFX JSObject 几分钟后停止工作?

我正在制作一个基于 Web 的应用程序,支持 Java,以满足某些特定请求(例如,无需每次都选择打印机即可进行打印),并且有一些东西让我抓狂

我使用 JavaFX 实例化浏览器对象,一切正常,但当然我需要从 JavaScript 回调到 Java,代码如下:

...
...
we.getLoadWorker().stateProperty().addListener( new ChangeListener<Worker.State>()
    {
        @Override
        public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue)
        {
            if ( newValue == Worker.State.SUCCEEDED )
            {
                bridge = new Bridge();
                JSObject jsobj = (JSObject) we.executeScript( "window" );
                jsobj.setMember( "app", new Bridge() );
            }

            if ( newValue == Worker.State.CANCELLED )
            {
                System.out.println( newValue );
                System.out.println( "An error accourred" );
            }
        }
    });
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

这是可行的,但几分钟后,桥接器完全工作,javascript 无法再进行回调,如果我尝试在“app”对象上发出警报(),它会返回未定义的结果。我用的是JDK9

java javafx jsobject javafx-webengine

5
推荐指数
1
解决办法
582
查看次数