HarmonyOS鸿蒙Next中有没有webview和原生通信的示例?

HarmonyOS鸿蒙Next中有没有webview和原生通信的示例? 比如我要html向鸿蒙native发送json数据,或者native向html发送数据。

5 回复

👍👍,

HarmonyOS Next中通过Web组件实现Web与原生通信

使用postMessage()onMessage()进行双向数据交互,支持JSON格式传输。具体示例可在HarmonyOS官方文档的"Web组件"章节查看,包含JavaScript与ArkTS的通信代码实现。

在HarmonyOS Next中,可以通过Web组件(相当于WebView)与原生应用进行双向通信。主要使用postMessage()onMessage()方法实现。

1. HTML向原生发送数据: 在HTML中使用JavaScript调用window.ohWebView.postMessage()发送JSON数据。

window.ohWebView.postMessage({ 
  type: 'userData', 
  data: { name: '张三', age: 25 } 
});

在ArkTS中通过Web组件的onMessage()接收:

webView.onMessage((event: web.WebMessage) => {
  const jsonData = JSON.parse(event.data as string)
  console.log('收到HTML数据:', jsonData)
})

2. 原生向HTML发送数据: 在ArkTS中使用postMessage()发送数据到HTML:

webView.postMessage(JSON.stringify({ command: 'update', value: '新数据' }))

在HTML中通过window.onmessage接收:

window.onmessage = (event) => {
  const data = JSON.parse(event.data)
  console.log('收到原生数据:', data)
}

3. 完整示例:

// ArkTS部分
import { web } from '@kit.ArkWeb'

@Entry
@Component
struct WebExample {
  controller: web.WebviewController = new web.WebviewController()

  build() {
    Column() {
      Web({ src: 'index.html', controller: this.controller })
        .onMessage((event: web.WebMessage) => {
          // 处理HTML发来的数据
          console.log('收到HTML消息:', event.data)
        })
      
      Button('发送到HTML')
        .onClick(() => {
          this.controller.postMessage(JSON.stringify({
            from: 'native',
            time: new Date().toISOString()
          }))
        })
    }
  }
}
<!-- HTML部分 -->
<script>
// 接收原生消息
window.onmessage = (e) => {
  console.log('收到原生消息:', JSON.parse(e.data))
}

// 发送消息到原生
function sendToNative() {
  window.ohWebView.postMessage({
    action: 'click',
    payload: { button: 'submit' }
  })
}
</script>

这种方式支持JSON等结构化数据的双向传输,实现了Web内容与HarmonyOS原生代码的完整交互能力。

回到顶部