想必熟悉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());

}

}

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: