java - 如何从java在jxbrowser中发送和接收序列化对象

标签 java jxbrowser

我必须使用jxbrowser将序列化对象从java发送到javascript,我这样做

String json = objectMapper.writeValueAsString(value);
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty(requestName, json);

据我所知,它会将全局窗口中的一个对象设置为 requestName?是真的? 以另一种方式,我如何从 java 站点读取这个对象。这段代码可以吗?

JSValue window = browser.executeJavaScriptAndReturnValue("window."+requestName);
T t = objectMapper.readValue(window.toString(), clazz))

提前致谢

最佳答案

您好,这里有两个方面。

Javascript执行上下文

JSValue 可以是普通值或 JavaScript 对象。

一旦调用executeJavaScriptAndReturnValue,您的执行上下文就完成了。您可以评估返回的对象。返回的对象可以是带有函数的 Java 脚本对象,在这种情况下您可以访问它。

假设您的 JavaScriptObject 有一个接受字符串的方法 helloWorld。

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
write.asFunction().invoke(document.asObject(), "To Me");

这样我们就将“To Me”字符串传递给了 helloWorldMethod。

您还可以设置对象的属性并稍后调用另一个方法。如果此方法使用此属性,则在下次执行时将考虑该属性:

JSValue document = browser.executeJavaScriptAndReturnValue("myJavascriptObject");
JSValue write = document.asObject().getProperty("helloWorldMethod");
document.asObject().setProperty("shouldISayGoodByeInstead",true)
write.asFunction().invoke(document.asObject(), "To Me");

属性shouldISayGoodByeInstead将作为第二次执行的一部分进行评估,第二次执行发生在调用helloWorldMethod时,而不是在第一次执行executeJavaScriptAndReturnValue期间。

关于java - 如何从java在jxbrowser中发送和接收序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52427464/

相关文章:

java - 使用java解析HTML以获取图像(背景:url)

java - 按顺序检索二叉搜索树中的元素

java - 可调用对象的并行执行

java - Android xml和Java : Get text from Edit Text,找不到符号错误

java - JxBrowser相关

java - 如何将 Java 和 jxbrowser 进程组合成单个自定义命名进程?

java - JxBrowser 占用大量内存

java - jxbrowser 下载时总是弹出空白窗口

java - JXBrowser在Ubuntu18.04中启动失败

java - hibernate 子查询抛出空指针异常