Android AgentWeb WebView 与js交互总结


想必熟悉android开发的同学都知道使用原生 webview 与js 的交互方式,下面我们先来回顾一下。


一、原生 Android webview 与js 的交互方式


webview 通过addJavascriptInterface 进行对象映射

首先要打开交互权限 , 允许使用javascript

webSettings.setJavaScriptEnabled(true);

第一步,进行对象映射,如下所示:

webView.addJavascriptInterface(new JsInterface() , "android");

说明:以上“ JsInterface ”、“android” 都可以自己命名,这里仅做为示例。


第二步,定义一个与JS对象映射关系的Android类 ,并定义JS需要调用的方法, 加入@JavascriptInterface注解


如下所示:

public class JsInterface{
     
     // Android 调用 Js 方法
     @JavascriptInterface
     public void jsFun(String name,String data){
      Log.e("TAG", "jsfun  name=="+name);
       Log.e("TAG", "jsfun  data=="+data);
    }
  }

通过上面的对象映射及实现后,js就可以使用android对象调用JsInterface 对象中 jsFun 的方法了,如下:


第三步,js 调用android方法

注意 : android就是约定好的映射对象名称, 如下:

  function jsCallAndroid(){
     
     //Js调用Android的方法
      android.jsFun("name", "params")
   }
    

那么使用 AgentWeb的Webview和js 的交互方式,你知道吗?

其实和原生webview与js的交互还是有些出入的,接下来,我们以代码进行详细说明。


二、AgentWeb的Webview和js 的交互方式


根据文档说明交互方式如下:

android 调用 javascript

mAgentWeb.getWebCreator().getWebView().getSettings().setJavaScriptEnabled(true);


//Javascript 方法
function callByAndroid(){
   console.log("callByAndroid")
}

//Android 端
mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");

//结果
consoleMessage:callByAndroid  lineNumber:27



javascript 调用 android


//Android 端 , AndroidInterface 是一个注入类 ,里面有一个无参数方法:callAndroid 
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(mAgentWeb,this));

//在 Js 里就能通过 
window.android.callAndroid() //调用 Java 层的 AndroidInterface 类里 callAndroid 方法



但是文档,并没有给出AndroidInterface的具体实现。

其实原理和原生webview与js的交互是一样的,以下是实现:


public class AndroidInterface {
  private AgentWeb agent;
  private Context context;

  public AndroidInterface(AgentWeb agent, Context context) {
  this.agent = agent;
  this.context = context;
  }

  @JavascriptInterface
  public void BackToAndroid(){
  //  send(new BackToHomeEvent());
  }
}

猜你喜欢

转载自blog.csdn.net/lizhong2008/article/details/131129365