android webview用法小结2 java与javascript的交互

本文介绍如何在Android中使用WebView使JavaScript与Java代码进行交互。通过设置启用JavaScript功能,并创建JavaScript接口来调用Java方法,同时展示了如何处理JavaScript中的alert、confirm及prompt对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先让浏览器支持javascript

  1. webView.getSettings().setJavaScriptEnabled(true);//打开就可以用js的功能
webView.getSettings().setJavaScriptEnabled(true);//打开就可以用js的功能

Js代码,放在asset文件夹下,也可以在服务器端,这样改变内容,只需改服务器端,客户端不用修改

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. <title>Insert title here</title>
  6. <script type="text/javascript">
  7. function btn_test() {
  8. /* 打印,logcat里的tag是Web Console */
  9. console.log("btn_test");
  10. }
  11. function call_java() {
  12. /* js调用java代码,需要接口 */
  13. Window.interface_test.showToastFromWeb("hello i am javascript!");
  14. }
  15. function test_alert() {
  16. /* 弹出对话框 */
  17. alert("hello i am javascript!");
  18. }
  19. function test_confirm() {
  20. /* 弹出带确定和取消按钮的对话框 */
  21. var v = confirm("hello i am javascript!");
  22. console.log("onfirm " + v);
  23. }
  24. function test_prompt() {
  25. /* 弹出带输入框的对话框 */
  26. var v = prompt("input you name!", "tom");
  27. console.log("prompt " + v);
  28. }
  29. </script>
  30. </head>
  31. <body>
  32. <button onclick="btn_test()">test</button>
  33. <button onclick="call_java()">call_java</button>
  34. <button onclick="test_alert()">test_alert</button>
  35. <button onclick="test_confirm()">test_confirm</button>
  36. <button onclick="test_prompt()">test_prompt</button>
  37. <label tel:800800284>tel:8008233</label>
  38. </body>
  39. </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<script type="text/javascript">
	function btn_test() {
/* 打印,logcat里的tag是Web Console */
		console.log("btn_test");
	}

	function call_java() {
/* js调用java代码,需要接口 */
		Window.interface_test.showToastFromWeb("hello i am javascript!");
	}

	function test_alert() {
/* 弹出对话框 */
		alert("hello i am javascript!");
	}

	function test_confirm() {
		/* 弹出带确定和取消按钮的对话框 */
	var v = confirm("hello i am javascript!");
		console.log("onfirm " + v);
	}

	function test_prompt() {
/* 弹出带输入框的对话框 */
		var v = prompt("input you name!", "tom");
		console.log("prompt " + v);
	}
	
</script>
</head>
<body>
	<button onclick="btn_test()">test</button>
	<button onclick="call_java()">call_java</button>
	<button onclick="test_alert()">test_alert</button>
	<button onclick="test_confirm()">test_confirm</button>
	<button onclick="test_prompt()">test_prompt</button>
	<label tel:800800284>tel:8008233</label>

</body>
</html>

Java代码里

对应call_java()方法

  1. webView.addJavascriptInterface(new Object(){
  2. public void showToastFromWeb(String msg){
  3. showToast(msg);
  4. }
  5. }, "interface_test");
webView.addJavascriptInterface(new Object(){
			public void showToastFromWeb(String msg){
				showToast(msg);
			}
		}, "interface_test");

对应alert等方法

  1. webView.setWebChromeClient(new WebChromeClient(){
  2. @Override
  3. public void onProgressChanged(WebView view, int newProgress) {
  4. //这里上一博文已提过
  5. }
  6. @Override
  7. public boolean onJsAlert(WebView view, String url, String message,
  8. JsResult result) {
  9. // TODO Auto-generated method stub
  10. return super.onJsAlert(view, url, message, result);
  11. }
  12. @Override
  13. public boolean onJsConfirm(WebView view, String url,
  14. String message, JsResult result) {
  15. // TODO Auto-generated method stub
  16. return super.onJsConfirm(view, url, message, result);
  17. }
  18. @Override
  19. public boolean onJsPrompt(WebView view, String url, String message,
  20. String defaultValue, JsPromptResult result) {
  21. // TODO Auto-generated method stub
  22. return super.onJsPrompt(view, url, message, defaultValue, result);
  23. }
  24. });
webView.setWebChromeClient(new WebChromeClient(){

			@Override
			public void onProgressChanged(WebView view, int newProgress) {
//这里上一博文已提过
			}

			@Override
			public boolean onJsAlert(WebView view, String url, String message,
					JsResult result) {
				// TODO Auto-generated method stub
				return super.onJsAlert(view, url, message, result);
			}
			
			@Override
			public boolean onJsConfirm(WebView view, String url,
					String message, JsResult result) {
				// TODO Auto-generated method stub
				return super.onJsConfirm(view, url, message, result);
			}

			@Override
			public boolean onJsPrompt(WebView view, String url, String message,
					String defaultValue, JsPromptResult result) {
				// TODO Auto-generated method stub
				return super.onJsPrompt(view, url, message, defaultValue, result);
			}
						
		});

加载html

  1. // webView.loadUrl("javascript:btn_test()");
  2. webView.loadUrl("file:///android_asset/test.html");
//			webView.loadUrl("javascript:btn_test()");
			webView.loadUrl("file:///android_asset/test.html");

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值