1.加載本地html文件
webView = findViewById(R.id.wv);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/index.html"); // 這裏是三個斜槓
2. java 中打印html js中的log
webView.setWebChromeClient(new WebChromeClient() {
// 打印js中的log
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.d("xct", "[" + consoleMessage.messageLevel() + "] " + consoleMessage.message() + "(" + consoleMessage.sourceId() + ":" + consoleMessage.lineNumber() + ")");
return super.onConsoleMessage(consoleMessage);
}
});
3. java 中調用js中的方法
- 方法1 無返回值
webView.loadUrl("javascript:function()");
- 方法2 有返回值
//調用js 並獲得返回值
webView.evaluateJavascript("javascript:function()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.d("xct", "jsvalue:" + value);
isFirstIndex = Boolean.parseBoolean(value);
}
});
4. js 調用Android方法
Android和JS通過webview.addJavascriptInterface(new JSTest(),“xct”)方法形成對象映射,JS中的xct對象就可以調用Android中的JSTest對象中的方法了。
- 步驟1:在Android裏通過WebView設置Android類與JS代碼的映射
public class MainActivity extends AppCompatActivity {
WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);//設置與Js交互的權限
//參數1:Java對象名 參數2:Javascript對象名
//通過addJavascriptInterface() AJavaScriptInterface類對象映射到JS的xct對象
mWebView.addJavascriptInterface(new JSTest(),"xct");
// 加載JS代碼
mWebView.loadUrl("file:///android_asset/javascript.html");
- 步驟2:定義一個與JS對象映射關係的Android類:JSTest
public class JSTest {
// 定義JS需要調用的方法,被JS調用的方法必須加入@JavascriptInterface註解
@JavascriptInterface
public void hello(String msg) {
System.out.println("JS成功調用了Android的hello方法");
}
}
- 步驟3:將需要調用的JS代碼javascript.html格式放到src/main/assets文件夾裏
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Carson</title>
<script>
function callAndroid(){
// 由於對象映射,所以調用test對象等於調用Android映射的對象
xct.hello("js去調用了android中的hello方法");
}
</script>
</head>
<body>
//點擊按鈕則調用callAndroid函數
<button type="button" id="button1" onclick="callAndroid()"></button>
</body>
</html>