0

JxBrowser 6.1.1 を使用していますが、Java オブジェクトをハンドラーに登録することに成功しましJsContextonFinishLoadingFrameJavaScript問題は、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