纯血鸿蒙Next中webview如何调用H5并在window下挂载新方法给App调用
在纯血鸿蒙Next系统中,使用WebView加载H5页面时,如何实现在window对象下挂载新的方法供App端调用?具体应该如何编写JS Bridge代码?是否需要特殊配置才能让H5成功调用到鸿蒙原生方法?求完整的实现示例和注意事项。
        
          2 回复
        
      
      
        在纯血鸿蒙Next中,可以通过WebView的addJavascriptInterface方法将ArkTS对象注入到H5的window对象中。例如:
// 创建JS桥接对象
class JSBridge {
  // 供H5调用的方法
  showToast(message: string) {
    // 调用原生能力
  }
}
// 注入到WebView
webView.addJavascriptInterface(new JSBridge(), "JSBridge")
这样H5就能通过window.JSBridge.showToast()调用原生方法啦!记得处理安全校验哦~
更多关于纯血鸿蒙Next中webview如何调用H5并在window下挂载新方法给App调用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在纯血鸿蒙Next(HarmonyOS NEXT)中,可以通过Web组件加载H5页面,并使用registerJavaScriptProxy()方法在H5的window对象下挂载新方法,供App调用。以下是实现步骤和示例代码:
1. 创建Web组件并加载H5页面
在ArkUI中使用Web组件加载本地或远程H5页面。
import webview from '@ohos.web.webview';
@Entry
@Component
struct WebViewExample {
  controller: webview.WebviewController = new webview.WebviewController();
  build() {
    Column() {
      // 加载本地H5页面(路径为resources/rawfile/)
      Web({ src: $rawfile('index.html'), controller: this.controller })
        .width('100%')
        .height('100%')
    }
  }
}
2. 注册JavaScript方法供H5调用
使用registerJavaScriptProxy()在H5的window对象下挂载方法。例如,挂载一个showToast方法:
import webview from '@ohos.web.webview';
import prompt from '@ohos.promptAction';
@Entry
@Component
struct WebViewExample {
  controller: webview.WebviewController = new webview.WebviewController();
  aboutToAppear() {
    // 注册方法到H5的window对象
    this.controller.registerJavaScriptProxy({
      // 定义showToast方法,H5可通过window.showToast调用
      showToast: (msg: string) => {
        prompt.showToast({ message: `App收到: ${msg}` });
      }
    }, 'window'); // 第二个参数指定挂载到window对象
  }
  build() {
    Column() {
      Web({ src: $rawfile('index.html'), controller: this.controller })
        .width('100%')
        .height('100%')
        .onPageEnd(() => {
          // 页面加载完成后刷新代理,确保方法生效
          this.controller.refresh();
        })
    }
  }
}
3. H5页面调用App方法
在H5的JavaScript代码中,直接通过window调用挂载的方法:
<!DOCTYPE html>
<html>
<head>
    <title>H5页面</title>
</head>
<body>
    <button onclick="callAppMethod()">调用App方法</button>
    
    <script>
        function callAppMethod() {
            // 调用App挂载的showToast方法
            if (window.showToast) {
                window.showToast('Hello from H5!');
            } else {
                alert('方法未挂载成功');
            }
        }
    </script>
</body>
</html>
注意事项:
- 安全机制:确保仅信任的H5页面可调用这些方法,避免安全风险。
 - 生命周期:在页面加载完成(如
onPageEnd)后调用refresh(),确保代理生效。 - 类型匹配:H5和App间传递的数据需为基本类型(如string、number),复杂对象需序列化。
 
通过以上步骤,即可在纯血鸿蒙Next中实现WebView与H5的交互,并在H5的window对象下安全挂载方法供App调用。
        
      
                  
                  
                  
