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