在開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到webview娇妓,必然會(huì)涉及到webview與客戶端的交互,比如在網(wǎng)頁(yè)上進(jìn)行某個(gè)操作后辫塌,需要在app上顯示一個(gè)提示帝嗡,提示內(nèi)容由網(wǎng)頁(yè)提供,這時(shí)候就需要js來(lái)調(diào)用客戶端的java代碼了璃氢。
webview提供了一個(gè)方法addJavascriptInterface()來(lái)滿足這種需求哟玷。
具體步驟:
-
客戶端定義一個(gè)類,并定義需要的方法一也,例如:
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注解。
-
生成第一步中定義的類的實(shí)例并添加給webview椰苟。
webView.addJavascriptInterface(new WebAppInterface(getActivity()), "TestObject");
這里的"TestObject"是隨便起的名字抑月,你可以改成其他的。這個(gè)名字主要是讓webview的js調(diào)用的舆蝴。
-
在js中通過(guò)"TestObject"對(duì)象調(diào)用客戶端方法
TestObject.showToastContent("haha")
備上一段官網(wǎng)關(guān)于這個(gè)內(nèi)容的代碼:
class JsObject {
@JavascriptInterface
public String toString() { return "injectedObject"; }
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");