js、原生互调

注:本文基于Android设备AgentWeb框架实现安卓原生和react互通

1.安卓调用js方法

  •   react端暴露方法

  const loadWithAndroidFunction = (obj) => {
      console.log(`安卓调用js方法 入参:${obj}`)
    }
  useEffect(() => {
      // 在useEffect中暴露方法到window上。
      // ts方式
      // (window as any).loadWithAndroid = loadWithAndroidFunction;
      // js方式
      // window.loadWithAndroid = loadWithAndroidFunction;
    }, [])
  •   安卓端调用js暴露的方法

  //方法名称 入参
  agentweb调用:mAgentWeb.jsAccessEntrace.quickCallJs("loadWithAndroid", "android test")
  普通webveiw调用:webView.loadUrl("javascript:loadWithAndroid('"+android test+"')");

2.js调用安卓原生方法
  •   安卓端定义方法

  class WebInterface {
  @JavascriptInterface
  fun completeWithJs(url: String) {
  Log.i("interface:", "js 调用安卓方法 入参:${url}")
  }
  }
   agentweb调用:mAgentWeb.jsInterfaceHolder.addJavaObject("android", WebInterface())
   普通webview调用:webView.addJavascriptInterface(new WebInterface(),"android");
  •   react端调用安卓原生方法

    window.android.completeWithJs("www.baidu.com")
 
posted @ 2022-12-22 10:21  小德505  阅读(126)  评论(0)    收藏  举报