JavaFX+WebView/Javascript:setTimeOut不起作用调用堆栈来自Java
JavaFX+WebView/Javascript : setTimeOut does not work call stack comes from Java
我有一个JavaFX应用程序,它在WebView中加载我自己的HTML/JS应用程序。根据事件的不同,我需要从Java调用Javascript,从Javascript调用Java。
从JS到Java,每一个都很好,但从Java到Javascript,我有一些奇怪的行为。
- 以下是我如何设置两种语言之间的通信:
_
var javaObjectInjected = typeof javaObject !== "undefined";
if(javaObjectInjected && !javaObjectInitialized) {
jThalesEventBusInitialized = true;
const jsAdapter = {
publishToJs: onPublishToJs
};
javaObject.setJsAdapter(jsAdapter);
}
- 我的Java代码将在提供的
jsAdapter
上调用方法publishToJs
。这将导致onPublishToJs
的执行
_
function onPublishToJs(topic, data) {
alert('Yeah! We are inside JS'); //output_1
setTimeout(
function() {
alert('inside setTimeOut'); //output_2
},
1000
);
}
我确实得到了output_1,但没有得到output_2。这就像setTimeOut上的回调被丢弃了一样。
从Java调用JS时是否存在已知的限制?
我重构了代码,并没有使用javaObject.setJsAdapter(jsAdapter)
将jsAdapter
注入Java世界,而是将jsAdapter
作为window
的新成员公开给Java。
有了这个新的代码结构,我在从Java调用jsAdapter
时遇到了异常,因为我是从EDT
而不是JavaFX Application Thread
中调用的。
最终,我将jsAdapter
调用封装在Platform.runLater(() -> ...)
中,就这样
使用从JavaFX WebView加载的Javascript时,请确保始终从JavaFX应用程序线程执行Javascript调用。
相关文章:
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 借助asp.net验证或java脚本对多个文本进行验证
- java.net和javascript之间正则表达式的差异
- 如何从Java/scala调用js美化程序
- 如何使用json将对象列表从java转换为javascript
- Java脚本时间添加
- Rails File_field最大堆栈大小
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- 如何将字符串值从php页面发送到java脚本页面
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- d3中堆栈函数和嵌套函数之间的差异
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- DOM事件通过JSON转换为java
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- JavaFX+WebView/Javascript:setTimeOut不起作用调用堆栈来自Java
- 规范化与非规范化,当使用带有 JAVA/RDBMS 堆栈的 JSON 客户端时
- Java堆栈上的Cassandra与JavaScript堆栈上的Mongo-Db
- 从具有简单Javascript前端的Java后端迁移到MEAN堆栈