Android WebView和JS交互

基本思路,


使用WebView加载一个包含js的本地html,html中包含一个输入框,一个按钮,还有一个Label.
点击html中的按钮,将输入框中的值传给Android 通过toast显示出来,随后,Android调用

html中的Label,将其文本设置为输入值.

以下是html内容:

<html>
<head>
<script type="text/javascript">
	function toClient() {
	var theinput = document.getElementById("theinput");
	javascript:test.dealOrderFromJs(theinput.value);
	}
	function ClientCallMe(str) {
	var label = document.getElementById("fromClient");
	label.innerText=str;
	}
</script>
</head>
<body>
	order:
	<input id="theinput" /><br>
	<input type="button" value="click me" οnclick="toClient();" /> <br>
	result from client:
	<label id="fromClient"></label>
</body>

</html>

将这个html 命名为test.html 并保存在assets文件夹下.


在MainActivity中,定义Android对JS的接口类:

@ViewInject(R.id.tv) //使用xUtils习惯了,其实就是findViewByID ....
public WebView tv;   

private Handler mHandler = new Handler();

final class ClientInterface
{
	@JavascriptInterface     // Android4.2以上版本,需要在接口函数加上这个注解,据说是为了安全
	public void dealOrderFromJs(final String order)
	{
		
		Toast.makeText(getApplicationContext(), "javascript:ClientCallMe "+order+" \"client reviewed\")", Toast.LENGTH_SHORT).show(); //显示html中传来的值
		mHandler.post(new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				tv.loadUrl("javascript:ClientCallMe(\""+order+" client reviewed\")");//调用JS中的函数给Label设置文本
			}
		});
		
	}
}

在MainActivity的onCreate函数中加入下面初始化语句:

ViewUtils.inject(this);//如果用xUtils,加上这句,或者tv = (WebView)findViewById(R.id.tv);
tv.getSettings().setJavaScriptEnabled(true); //允许webview加载JavaScript
tv.addJavascriptInterface(new ClientInterface(), "test");//添加自定义的接口类
tv.loadUrl("file:///android_asset/test.html"); // 加载本地html, 注意,有三个斜杠

至此,一个最简单的交互就展现出来了.


学习Android和JS交互中遇到的问题:
1.由于对JS语言不熟悉, 网上有人先导入了JQuery,然后直接引用控件的id,
  例如: var btn = $("#id"), 我由于没有导入JQuery但是却采用了这种形式,
  导致出现JS语法问题,虽然apk运行不报错,但是Button点击后,就是没有响应.

2.Android与JS交互练习,点击Button没有响应时,应该仔细检查Js脚本.

3.程序需要访问网络的权限


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android WebView 是一个能够在 Android 应用程序中嵌入网页的组件,它可以开发出能够与 Web 页面进行交互的应用。其中与 Web 页面进行交互的一种方法是与 JavaScript 进行交互。下面简要解释一下 Android WebViewJS 交互的方式。 1. 加载本地 HTML 文件 在 Android WebView 中加载本地 HTML 文件时,需要使用 loadUrl() 方法加载。HTML 文件中的 JavaScript 可以通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,即可实现 JS 与 Java 的交互。 2. 加载远程 Web 页面 在 Android WebView 中加载远程 Web 页面时,需要添加 WebViewClient 和 WebChromeClient,分别是用来管理 WebView 的网络请求和处理页面上的 JavaScript 弹窗等请求。 在远程 Web 页面上,JS 代码可以通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,即可实现 JS 与 Java 的交互。 同时,在 Android 中处理 JS 的事件需要通过 JavaScriptInterface 向 WebView 注册一个映射对象,来实现 JS、Java 相互调用的机制,静态 HTML 文件是通过 WebView 中的 evaluateJavascript() 方法来调用 JS,来实现双向通信和数据交互。 总结来说,Android WebViewJS 交互的方式主要是通过 WebView 提供的 addJavascriptInterface() 方法注册为 Java 中的一个对象,然后在 Java 中调用该对象的方法,来实现 JS 和 Java 的交互。同时,JS 也可以通过 WebView 的 evaluateJavascript() 方法来调用 Java 中的方法,实现双向通信和数据交互
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值