在开发的时候经常会用到webview,必然会涉及到webview与客户端的交互,比如在网页上进行某个操作后,需要在app上显示一个提示,提示内容由网页提供,这时候就需要js来调用客户端的java代码了。
webview提供了一个方法addJavascriptInterface()来满足这种需求。
具体步骤:
-
客户端定义一个类,并定义需要的方法,例如:
public class WebAppInterface {
Context mContext;/** * Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** * Show a toast from the web page */ @JavascriptInterface public void showToastContent(String content) { }
}
注意,在方法定义前加上@JavascriptInterface注解。
-
生成第一步中定义的类的实例并添加给webview。
webView.addJavascriptInterface(new WebAppInterface(getActivity()), "TestObject");
这里的"TestObject"是随便起的名字,你可以改成其他的。这个名字主要是让webview的js调用的。
-
在js中通过"TestObject"对象调用客户端方法
TestObject.showToastContent("haha")
备上一段官网关于这个内容的代码:
class JsObject {
@JavascriptInterface
public String toString() { return "injectedObject"; }
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");