0

我正在使用 JxBrowser 6.1.1 并成功在处理程序中注册 JavaJsContext对象onFinishLoadingFrameJavaScript问题是当第一个在 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();
4

0 回答 0