JavaFX+WebView/Javascript:setTimeOut不工作调用堆栈来自Java
我有一个JavaFX应用程序,它在WebView中加载我自己的HTML/JS应用程序。根据事件的不同,我需要从Java调用Javascript,从Javascript调用Java 从JS到Java时,每一个都是好的,但从Java到Javascript时,我有一些奇怪的行为 基本上,以下是我如何设置两种语言之间的通信: _ 我的Java代码将在提供的jsAdapter上调用publishToJs方法。这将导致执行onPublishToJs。 _ 我得到的是输出_1,但不是输出_2。就像setTimeOut上的回调被丢弃一样JavaFX+WebView/Javascript:setTimeOut不工作调用堆栈来自Java,java,javascript,javafx-8,javafx-webengine,Java,Javascript,Javafx 8,Javafx Webengine,我有一个JavaFX应用程序,它在WebView中加载我自己的HTML/JS应用程序。根据事件的不同,我需要从Java调用Javascript,从Javascript调用Java 从JS到Java时,每一个都是好的,但从Java到Javascript时,我有一些奇怪的行为 基本上,以下是我如何设置两种语言之间的通信: _ 我的Java代码将在提供的jsAdapter上调用publishToJs方法。这将导致执行onPublishToJs。 _ 我得到的是输出_1,但不是输出_2。就像setTim
从Java调用JS时有任何已知的限制吗?我重构了代码,并没有使用javaObject.setJsAdapterjsAdapter将jsAdapter注入Java世界,而是将jsAdapter作为窗口的新成员公开给Java 有了这个新的代码结构,我在从Java调用jsAdapter时遇到了异常,因为我是从EDT而不是JavaFX应用程序线程进行调用的 最后,我将jsAdapter调用包装在Platform.runLater->。。。就这样
当使用从JavaFX WebView加载的Javascript时,请确保始终从JavaFX应用程序线程执行Javascript调用。这几乎是一个猜测-尝试setTimeout回调中的alert以外的其他方法,例如,将某些内容记录到console.JS控制台输出不会转发到Java控制台,因此我在HTML部分添加了FireBug Lite 1.2。在setTimeOut回调中,我将警报“…”替换为console.log“…”,它不会改变任何东西。仍然没有输出2!
var javaObjectInjected = typeof javaObject !== "undefined";
if(javaObjectInjected && !javaObjectInitialized) {
jThalesEventBusInitialized = true;
const jsAdapter = {
publishToJs: onPublishToJs
};
javaObject.setJsAdapter(jsAdapter);
}
function onPublishToJs(topic, data) {
alert('Yeah! We are inside JS'); //output_1
setTimeout(
function() {
alert('inside setTimeOut'); //output_2
},
1000
);
}