我有一个仅在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 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) WebEngine在JavaFX2中使用时,我注意到它有时会卡住.假设我正在创建一个只在页面上找到超链接的爬虫,然后访问它们以递归方式执行相同操作,跟踪我们访问过的链接以及哪些链接已经在边界上.在运行我的代码时,执行有时会在任意时刻挂起.
我在听众的形式加入一些调试代码到我的项目workDoneProperty,并exceptionProperty通过印刷的每一个过渡loadWorker的stateProperty.然后我注意到有时引擎会停止中间加载一个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) 如何调试 JavaFX Web 视图?我找到两种方法,
Method#1 似乎使用了一些 hack,比如设置对私有字段的访问权限等。Method#2 依赖于 firebuglite,它现在似乎已经过时了。
2022年应该怎么做。还有其他方法,或者更好的方法吗?
我现在正在尝试 firebug lite 方法,并且已将 javascript 作为 Maven 项目的一部分,并尝试将其作为字符串而不是外部 URL 注入,因为 firebug 似乎现在没有正确地公开托管。
这就是我现在所处的位置:
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) 我正在JavaFX中开发一个依赖于WebView(以及WebEngine)的数据挖掘应用程序.挖掘分两步进行:首先,用户使用UI导航到WebView中的网站,以配置可以搜索有趣数据的位置.其次,使用定期运行的后台任务,WebEngine加载相同的文档并尝试从加载的文档中提取数据.
这适用于大多数情况,但最近我遇到了使用AJAX呈现内容的页面遇到的麻烦.要检查是否已WebEngine加载文档,我听loadWorker的stateProperty.如果状态转换为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调用并在事后通知我的方法.
使用JavaFx WebEngine,如何检测是否存在404页面未找到错误.我已搜索但无法找到任何内容.有任何想法吗?或者有可能吗?
我有一个大量使用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) 在Java 8u51之前,以下工作正常:
<script src="javascript.js"></script>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文件中.
知道改变了什么以及如何解决这个问题?
我正在开发一个JavaFX应用程序,我正在尝试使用WebView访问Web应用程序.此Web应用程序具有基本身份验证,我想以编程方式提交凭据(不想提示用户提供凭据,它们存储在JavaFX应用程序中,我知道此方法的安全隐患).
我在谷歌找到的唯一链接是:
https://community.oracle.com/message/12518017
还没有答案.
我正在制作一个基于 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