Android与Javascript交互示例(二)

简介: MainActivity如下: package cn.testjavascript;import android.os.Bundle;import android.

MainActivity如下:

package cn.testjavascript;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.app.Activity;
/**
 * Demo描述:
 * JavaScript与Android中的方法
 * 的相互调用
 * 
 * 参考资料:
 * http://blog.csdn.net/wangtingshuai/article/details/8631835
 */
public class MainActivity extends Activity {
   private WebView mWebView;
   private Button mButton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
	private void init(){
		
		//以下为Javascript调用Java--------------------------
		mWebView=(WebView) findViewById(R.id.webView);
		initWebViewSettings();
		//加载本地Html文件
		mWebView.loadUrl("file:///android_asset/test.html");
		//注意:
		//addJavascriptInterface方法中第二参数
		//它表示我们的java对象javaClass的别名.这样js就可以通过该别名来调用Android中的方法
		//即js代码中的:
		//window.testjs.firstFunction
		//window.testjs.secondFunction
		JavaClass javaClass=new JavaClass(MainActivity.this);
		mWebView.addJavascriptInterface(javaClass, "testjs");
		
		
		
		//以下为Java调用Javascript--------------------------
		//注意:
		//在调用带参数的Javascript方法时
		//参数的写法,如此处的
		//mWebView.loadUrl("javascript:javacalljswithargs("+"'stringArg'"+")");
		//不加单引号是错误的
		mButton=(Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
                //调用Javascript中的无参方法				
				mWebView.loadUrl("javascript:javacalljs()");
				 //调用Javascript中带参数的方法		
				mWebView.loadUrl("javascript:javacalljswithargs("+"'stringArg'"+")");
				
			}
		});
	}
	private void initWebViewSettings(){
		mWebView.setVerticalScrollBarEnabled(false);
		mWebView.setHorizontalScrollBarEnabled(false);
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setDomStorageEnabled(true);
		mWebView.getSettings().setPluginsEnabled(true);
		mWebView.requestFocus();
		mWebView.getSettings().setUseWideViewPort(true);
		mWebView.getSettings().setLoadWithOverviewMode(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setBuiltInZoomControls(true);
	}
	
}


JavaClass如下:

package cn.testjavascript;

import android.content.Context;
import android.widget.Toast;

public class JavaClass {
	private Context mContext;
	
	public JavaClass(Context context) {
		this.mContext=context;
	}

	public void firstFunction() {
		Toast.makeText(mContext, "Javascipt调用Java中的方法,未携带参数", Toast.LENGTH_SHORT).show();
	}

	public void secondFunction(String string) {
		Toast.makeText(mContext, "Javascipt调用Java中的方法,携带参数为:"+string, Toast.LENGTH_SHORT).show();
	}
}

 

main.xml如下:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="370dip"
        android:layout_centerHorizontal="true"
     />
    <Button 
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="点击后Java调用Javascript"
        android:layout_alignParentBottom="true"
      />

</RelativeLayout>


test.html如下:

<html>
<head>
<meta http-equiv="Content-Type"	content="text/html;charset=gb2312">
<script type="text/javascript">
function javacalljs(){
	 document.getElementById("content").innerHTML +=   
         "<br\>java调用了javascript函数,未带参数";
}

function javacalljswithargs(arg){
	 document.getElementById("content").innerHTML +=   
         ("<br\>java调用了javascript函数,参数为:"+arg);
}

</script>
</head>
<body>
测试Android与Javascript的交互<br/>
<br>
<a onClick="window.testjs.firstFunction()">点击后Javascript调用java代码</a><br/>
<br>
<a onClick="window.testjs.secondFunction('arg')" >点击后Javascript调用java代码并携带参数</a>
<br/>
<br>
<div id="content">以下为java调用Javascript时的提示信息:</div>
</body>
</html>



 

相关文章
|
3月前
|
存储 算法 开发工具
OpenCV 安卓编程示例:1~6 全
OpenCV 安卓编程示例:1~6 全
|
3月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
38 0
|
3天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
3 0
|
3天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
5 0
|
26天前
|
JavaScript
js开发:请解释什么是ES6的扩展运算符(spread operator),并给出一个示例。
ES6的扩展运算符(...)用于可迭代对象展开,如数组和对象。在数组中,它能将一个数组的元素合并到另一个数组。例如:`[1, 2, 3, 4, 5]`。在对象中,它用于复制并合并属性,如`{a: 1, b: 2, c: 3}`。
12 3
|
26天前
|
JavaScript
js开发:请解释什么是ES6的默认参数(default parameters),并给出一个示例。
ES6允许在函数参数中设置默认值,如`function greet(name = &#39;World&#39;) {...}`。当调用函数不传入`name`参数时,它将默认为&#39;World&#39;,提升代码简洁性和可读性。例如:`greet()`输出&quot;Hello, World!&quot;,`greet(&#39;Alice&#39;)`输出&quot;Hello, Alice!&quot;。
15 4
|
27天前
|
SQL JavaScript
js开发:请解释什么是ES6的模板字符串(template string),并给出一个示例。
ES6的模板字符串以反引号包围,支持变量和表达式插入以及多行书写。例如,插入变量值`Hello, ${name}!`,计算表达式`${num1 + num2}`,以及创建多行字符串。模板字符串保留原始空格和缩进,简化了字符串拼接,提高了代码可读性。
18 6
|
27天前
|
JavaScript 前端开发
js开发:请解释什么是事件委托(event delegation),并给出一个示例。
事件委托是JavaScript中优化事件处理的技术,通过绑定事件处理器到共享的父元素,利用事件冒泡机制来处理子元素的事件。这种方法能提升性能、简化代码并降低内存消耗。示例展示了如何在父元素上监听`click`事件,然后通过`event.target`识别触发事件的具体子元素(如`&lt;li&gt;`),实现对动态生成列表项的点击事件处理。
|
1月前
|
小程序 JavaScript 前端开发
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
【微信小程序】--WXML & WXSS & JS 逻辑交互介绍(四)
|
1月前
|
移动开发 JavaScript Android开发
Android与Html5交互
Android与Html5交互