Android平台,如何调用javascript操作网页和js

系统 1872 0
预期效果:1、java编程实现显示一个网页显示(list,list中有电话号码),网页中的数据内容由程序传过去。
          2、点击网页中的电话号码部分,调用手机的打电话界面。
如图:
Android平台,如何调用javascript操作网页和js调用系统功能


具体实现:
1、在assets中定义index.html文件,这个文件中table中的数据由javascript生成
ps:
(1) contactlist(jsons) 将由java程序调用
(2) onload="javascript:myjavascript.show(): javascript调用java程序,详情见下文
    
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
  function contactlist(jsons){
  var table=document.getElementById("contactTable");//获得html中Table
  var arr = eval(jsons);//将jsons字符串转换为json对象数组
  for(var i=0;i < arr.length;i++){
	var jsonObj = arr[i];
	var tr = table.insertRow(table.rows.length);//添加tr
	var td1 = tr.insertCell(0);//td
	var td2 = tr.insertCell(1);
	td2.align = "center";
	var td3 = tr.insertCell(2);

	td1.innerHTML = jsonObj.id;//设置每列对应的值
	td2.innerHTML = jsonObj.name;
	td3.innerHTML = jsonObj.phone;
	}
  }

  //-->
</SCRIPT>
 <BODY onload="javascript:myjavascript.show()">
   <table width="100%" border="0" cellspacing="0" id="contactTable">
	<tr>
	  <td width="20%">编号</td>
	  <td width="center">姓名</td>
	  <td width="30%">电话</td>
	</tr>
   </table>
 </BODY>
</HTML>
  


2、下面是java程序代码,首先是布局文件,很简单,就是一个webview
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<WebView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/webview"
    />
</LinearLayout>
  


3、HtmlUIActivity类,这个类负责html的加载显示、添加javascript支持,提供给javascript调用接口。
    /**
 * HTML ui类 
 */
public class HtmlUIActivity extends Activity {
	private WebView webView;
	private Handler handler = new Handler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        setContentView(R.layout.main);
        webView = (WebView)findViewById(R.id.webview);
       //重要:让webview支持javascript
        webView.getSettings().setJavaScriptEnabled(true);
       //重要:添加可以供html中可供javascript调用的接口类
        webView.addJavascriptInterface(new MyJavaScript(this, handler), "myjavascript");
        //加载index.html
        webView.loadUrl("file:///android_asset/index.html");
    }
}
  


4、MyJavaScript负责提供数据并显示html

    public class MyJavaScript {
	private WebView webview;
	//使用一个handler来处理加载事件
	private Handler handler;
	public MyJavaScript(Context context,Handler handler){
		this.handler = handler;
		webview = (WebView) ((Activity)context).findViewById(R.id.webview);
	}
	/*
	 * java调用显示网页,异步
	 */
	public void show(){
	  handler.post(new Runnable() {			
	    public void run() {
		重要:url的生成,传递数据给网页
	        String url = "javascript:contactlist('" + generateData() + "')";
	       webview.loadUrl(url);
	    }
	   });
	}
	/*
	 * 由java程序生成数据传到网页中显示
	 */
	private String generateData(){
	  try {
		//构造一个json对象
		JSONObject obj1 = new JSONObject();
		obj1.put("id", 12);
		obj1.put("name", "tom");
		obj1.put("phone", "66666666");
			
		JSONObject obj2 = new JSONObject();
		obj2.put("id", 13);
		obj2.put("name", "jerry");
		obj2.put("phone", "88888888");
			
		//将构造好的2个json对象加入到json数组中
		JSONArray arr = new JSONArray();
		arr.put(obj1);
		arr.put(obj2);
		return arr.toString();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}
}
  


至此,java程序与javascript之间的双向调用已经完成了。至于我们预期目标的第2项,只需要:   
(1)、在MyJavaScript类中添加方法
        /*
    * 拨打电话方法
    */
  public void call(final String phone){
         Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:" + phone));
context.startActivity(intent);
   }
  
 
   (2)、在index.html中将
   
     td3.innerHTML = jsonObj.phone;
  

   修改为:
    td3.innerHTML = "<a href=\"javascript:myjavascript.call('"+jsonObj.phone + "')\">" + jsonObj.phone + "</a>";
  

   最后记得加上打电话的权限:
    <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
  

Android平台,如何调用javascript操作网页和js调用系统功能


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论