我必须使用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/