问题描述
有谁知道是否以及如何在 jxbrowser 中将字节 [] 从 java 传递到 javascript?
(目标是在浏览器中打开一个二进制文件而不弹出文件选择器对话框)。
当我尝试本地传递 byte[] 时:
Java:
JsFunction function = frame.executeJavaScript("openFileContent");
byte[] blob = new byte[3];
blob[0] = 10;
blob[1] = 20;
blob[2] = 30;
return function.invoke(instance,blob);
Javascript:
openFileContent = function(fileContent) {
console.log(fileContent);
console.log(fileContent[0]);
在 javascript 方面,我得到:
[object [B]
undefined
所以它看起来并没有被编组成任何可用的东西。
我的另一种方法是将 blob 包装成一个 POJO,例如:
public static class JsBlob {
private byte[] buffer;
public JsBlob(byte[] buffer) {
this.buffer = buffer;
}
@JsAccessible
public byte get(int index) {
return buffer[index];
}
@JsAccessible
public byte[] getBuffer() {
return buffer;
}
@JsAccessible
public int getLength() {
return buffer.length;
}
}
由于在逐字节获取实际数组内容时的所有进程间调用,这在工作时非常慢。
我当前的后备方案是将 base64 编码的 blob 传输到字符串中,该字符串确实被正确编组为字符串,然后在 js 端对其进行解码,但如果可能的话,我想尽可能避免这种不必要的处理。
解决方法
产品路线图中对 JavaScript 数组的支持:https://jxbrowser-support.teamdev.com/roadmap/
因此,下一版本将支持此功能。您可以在 Twitter 上关注 JxBrowser 以了解此功能何时发布:https://twitter.com/JxBrowserTeam