我必须使用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))
预先感谢
答案 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))