如何从Java发送和接收jxbrowser中的序列化对象

时间:2018-09-20 14:27:36

标签: java jxbrowser

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

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))

预先感谢

2 个答案:

答案 0 :(得分:2)

您好,这里有两个方面。

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。

您还可以在Object上设置属性,然后再调用另一个方法。如果此方法使用此属性,则将在下一次执行中考虑该问题:

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

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

答案 1 :(得分:0)

如果我对您的理解正确,则希望通过JSON设置JavaScript对象。这可以通过JSONString实现。您可以在此处查看示例:https://jxbrowser.support.teamdev.com/support/solutions/articles/9000013064-working-with-json

之后,您要获取JSON对象。对于这种情况,有一种方法

JSObject.toJSONString()

因此,如果我们以以下方式更改您的示例,则该示例应该可以正常运行:

String json = objectMapper.writeValueAsString(value);
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty(requestName,  new JSONString(json));
JSValue window = browser.executeJavaScriptAndReturnValue("window."+requestName);
T t = objectMapper.readValue(window.asObject().toJSONString(), clazz))