我正在使用 JxBrowser 6.1.1 并成功在处理程序中注册 JavaJsContext对象onFinishLoadingFrame。JavaScript问题是当第一个在 JxBrowser 加载的页面中运行时,该属性还不可用。
工作调用如下所示:
browser.executeJavaScriptAndReturnValue("window").asObject().setProperty("api", api);
当我在新onScriptContextCreated处理程序中执行相同操作时,程序会停止执行:
JSValue jsWindow = browser.executeJavaScriptAndReturnValue("window");
完整的代码在 JSValue jsWindow = ... 行失败:
client.browser.addScriptContextListener(new ScriptContextAdapter() {
@Override
public void onScriptContextCreated(ScriptContextEvent event) {
Browser browser = event.getBrowser();
JSValue jsWindow = browser.executeJavaScriptAndReturnValue("window");
JSObject windowObject = jsWindow.asObject();
windowObject.setProperty("api", client.getApi());
}
});
我猜该window物业根本不存在。
有没有办法通过onScriptContextCreated事件来实现这一目标,或者有没有不同的方式来实现这一目标?
当在一个单独的线程中启动时,代码也可以正常工作,如下所示。但是问题仍然存在,这段代码比浏览器中的第一个 JavaScript 运行得晚。
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
JSValue jsWindow = browser.executeJavaScriptAndReturnValue("window");
JSObject windowObject = jsWindow.asObject();
windowObject.setProperty("api", client.getApi());
}
});
thread.start();