HarmonyOS鸿蒙Next中应用测向前端Html发送大数据(如图片的base64),解决runJavaScript无法发送大数据的问题!
HarmonyOS鸿蒙Next中应用测向前端Html发送大数据(如图片的base64),解决runJavaScript无法发送大数据的问题!
应用测:
```kotlin
try {
// 创建端口
this.ports = this.controller.createWebMessagePorts()
// 将消息端口(如端口0)发送到HTML侧,由HTML侧保存并使用。
this.controller.postMessage('__init_port__', [this.ports[0]], '*')
// 在应用侧的消息端口(如端口1)上注册回调事件, 该回调事件 注:必须注册 必须注册 必须注册 不然连信息无法发送到前端,
this.ports[1].onMessageEvent((result: web_webview.WebMessage) => {
})
if (this.ports && this.ports[1]) {
this.ports[1].postMessageEvent(infos)
}
} catch (e) {
console.error(e)
}
Html:
window.addEventListener('message', function (event) {
if (event.data === '__init_port__') {
if (event.ports[0] !== null) {
// 保存从应用侧发送过来的端口
const h5Port = event.ports[0];
h5Port.onmessage = function (event) {
// 获取数据
let result = event.data;
if (typeof (result) === 'string') {
demoimg.src = result
}
}
}
}
})
更多关于HarmonyOS鸿蒙Next中应用测向前端Html发送大数据(如图片的base64),解决runJavaScript无法发送大数据的问题!的实战教程也可以访问 https://www.itying.com/category-93-b0.html
好用,谢谢
更多关于HarmonyOS鸿蒙Next中应用测向前端Html发送大数据(如图片的base64),解决runJavaScript无法发送大数据的问题!的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
终于有人说明白这个问题了,感谢博主
在HarmonyOS鸿蒙Next中,应用向前端HTML发送大数据(如图片的base64数据)时,runJavaScript
方法由于性能限制可能无法处理大数据传输。可以通过以下步骤解决:
-
使用
WebMessagePort
进行通信:WebMessagePort
是鸿蒙提供的一种高效的双向通信机制,适合处理大数据传输。首先在前端HTML中创建MessageChannel
,并将一个端口传递给应用端。 -
应用端接收端口并发送数据:在应用端通过
WebView
的addJavascriptInterface
方法接收前端传递的端口,然后通过该端口发送大数据。 -
前端接收数据:前端通过
MessageChannel
的另一个端口接收应用端发送的数据。
代码示例:
前端HTML:
<script>
const channel = new MessageChannel();
window.hwjsBridge = channel.port1;
channel.port1.onmessage = (event) => {
console.log('Received data:', event.data);
};
window.hwjsBridge.postMessage('ready');
</script>
应用端:
import webview from '@ohos.web.webview';
let webView = webview.WebView.create(context);
webView.addJavascriptInterface({
onMessage: (port) => {
port.postMessage(largeData);
}
}, 'hwjsBridge');
在HarmonyOS鸿蒙Next中,若需通过runJavaScript
向前端HTML发送大数据(如图片的base64),由于runJavaScript
对数据大小有限制,建议采用以下方案:
- 分块传输:将大数据拆分为多个小块,通过多次调用
runJavaScript
发送。 - WebSocket通信:建立WebSocket连接,通过WebSocket传输大数据,前端接收后处理。
- 本地存储:将数据存储到本地文件或数据库,前端通过接口读取。
推荐使用WebSocket,因其支持高效的大数据传输,且实时性较好。