WebView控件最重要的應(yīng)用是與JavaScript的互調(diào)。在Android4.2之后與JavaScript的注入需要加入注解“@JavascriptInterface”。
一、Android端調(diào)用HTML中的JavaScript代碼
Android端只需要在初始化WebView控件時,開啟該控件對JavaScript的支持,然后先調(diào)用loadUrl()方法來加載HTML文件,接著再次調(diào)用該方法完成對JavaScript代碼的調(diào)用。接下來舉個例子,在一個名為test的HTML頁面中定義一個JavaScript方法,具體代碼如下:
fuction javaCallJs(){
document.getElementById("content").innerHTML+="java調(diào)用了js函數(shù)";
}
在Android端初始化一個WebView控件并加載test.html文件,具體代碼如下:
private void initWebView(){
mWebView.getSettings().setJavaScriptEnabled(true); //啟用了Javascript
mWebView.load("file://android_asset/test.html"); //加載HTML文件
}
調(diào)用HTML頁面中的javacallJs()方法,具體代碼如下:
mWebView.loadUrl("javascript:javaCallJs()");
二、Javascript調(diào)用Android端的代碼
首先為WebView控件綁定一個JavascriptInterface類,JavaScript腳本通過該類對Java代碼進行調(diào)用,定義一個JavascriptInterface類,具體代碼如下:
public class TestInterface {
/**
* 因為安全問題,在Android4.2以后(應(yīng)用的android:tragetSdkVersion數(shù)值為17+)
* JS只能訪問帶有@JavascriptInterface注解的函數(shù)
*/
@JavascriptInterface
public void startFunction() {
Toast.makeText(MainActivity.this,"Js調(diào)用了Java",Toast.LENGTH_SHORT).show();
}
}
在初始化WebView控件時需要綁定這個JavascriptInterface,具體代碼如下:
//在代碼中,TestInterface是實例化的對象,testInterface是這個對象在js中的別名
mWebView.addJavascriptInterface(new TestInterface(),"testInterface");
通過在綁定JavascriptInterface時設(shè)置的別名,可以使JavaScript調(diào)用Java代碼,HTML中的具體代碼如下:
<body>
this is my html<br/>
<a onclick="window.testInterface.startFunction()">點擊調(diào)用Java代碼</a><br/>
<body>