android webview 与 javascript交互

webview与javascript交互实现图文混排效果,感觉还不错!

直接上demo吧。

demo1:

template.html

<html>

<head>

</head>

<script>

function load_title(title) {

  var t = document.getElementById("title");

  t.innerHTML = title;

}

 

function load_content(content) {

  var c = document.getElementById("content");

  c.innerHTML = content;

}

 

function load_img(img) {

  var i = document.getElementById("img");

  i.src = img;

}

 

</script>

<body>

<div>

<img id="img" src="" alt="loading..." style="float:left;margin:5px;"/><span id="title" style="font-size:24px;padding:20px;"></span><br/><span id="content"></span>

</div>

</body>

 

</html>

 

MainActivity.java文件:

public class MainActivity extends Activity {

private WebView webView;

private Button loadHtml;

private String str="这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这这个阶段的典型特征是容易被新技术的华丽外表所迷惑。当在网上看到一种新技术的介绍或者心得,立即产生了大量肾上腺素的分泌,干什么都想用一用,如果这";

// 我们用它来完成我们的异步调用 ,当我new这个对象出来,它会绑定到当前

// activity消息队列里去,如果发现它里面新建了Runnable,它就会新建一个线程去。。。

private Handler handler = new Handler();

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.webviewtestlayout);

webView = (WebView) this.findViewById(R.id.webView);

// 支持javaScript

webView.getSettings().setJavaScriptEnabled(true);

// 不保存表单数据

webView.getSettings().setSaveFormData(false);

// 不保存密码

webView.getSettings().setSavePassword(false);

// 不支持页面放大功能

webView.getSettings().setSupportZoom(false);

 

// 把我们的页面显示出来

webView.loadUrl("file:///android_asset/template.html");

loadHtml = (Button)findViewById(R.id.loadHtml);

loadHtml.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// FIXME Auto-generated method stub

handler.post(new Runnable() {

@Override

public void run() {

webView.loadUrl("javascript:load_title('" + "My Title"

+ "')");

webView.loadUrl("javascript:load_content('" + str

+ "')");

webView.loadUrl("javascript:load_img('" + "/sdcard/dzsy.jpg"

+ "')");

}

});

}

});

 

}

 

demo2是有交互的:

index.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>联系人列表</title>

<script type="text/javascript">

//我们传入的jsondata是一个数组如:

//[{id:20,name:"王昌龙",phone:"18701445755"},......] 这样

 function show(jsondata){

  var jsonobjs = eval(jsondata);

  var table = document.getElementById("personTable");

  for(var y=0; y<jsonobjs.length; y++){

         var tr = table.insertRow(table.rows.length); //添加一行

         tr.onmouseover = function (){

          this.style.backgroundColor= "red";

         }

         tr.onmouseout = function (){

          this.style.backgroundColor= "#000000";

         }

         //添加三列

         var td1 = tr.insertCell(0);

         var td2 = tr.insertCell(1);

         td2.align = "center";

         var td3 = tr.insertCell(2);

         //设置列内容和属性

         td1.innerHTML = jsonobjs[y].id; 

         //转义

         td2.innerHTML = "<a href='javascript:partner4java.call(/"5554/")'>"+ jsonobjs[y].name + "</a>"; 

         td3.innerHTML = jsonobjs[y].phone;

  }

 }

 function init(){

  var jsondata  = "[{id:20,name:/"王昌龙/",phone:/"18701445755/"},{id:21,name:/"小妾/",phone:/"18701445755/"}]";

  show(jsondata); 

 }

</script>

</head>

MainActivity.java文件:

public class MainActivity extends Activity {

private WebView webView;

private Button loadHtml;

// 我们用它来完成我们的异步调用 ,当我new这个对象出来,它会绑定到当前

// activity消息队列里去,如果发现它里面新建了Runnable,它就会新建一个线程去。。。

private Handler handler = new Handler();

 

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.webviewtestlayout);

webView = (WebView) this.findViewById(R.id.webView);

// 支持javaScript

webView.getSettings().setJavaScriptEnabled(true);

// 不保存表单数据

webView.getSettings().setSaveFormData(false);

// 不保存密码

webView.getSettings().setSavePassword(false);

// 不支持页面放大功能

webView.getSettings().setSupportZoom(false);

 

webView.addJavascriptInterface(new Partner4javaJavaScript(),

"partner4java");

// 把我们的页面显示出来

webView.loadUrl("file:///android_asset/index.html");

loadHtml = (Button)findViewById(R.id.loadHtml);

loadHtml.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// FIXME Auto-generated method stub

handler.post(new Runnable() {

@Override

public void run() {

// // 可以通过访问SQLite访问数据库获取

List<Contact> contacts = new ArrayList<Contact>();

contacts.add(new Contact(12, "王昌龙", "18701445755"));

contacts.add(new Contact(13, "小妾", "18701445755"));

webView.loadUrl("javascript:show('" + buildJson(contacts)

+ "')");

}

});

}

});

 

}

private String buildJson(List<Contact> contacts) {

try {

JSONArray jsonArray = new JSONArray();

for (Contact contact : contacts) {

JSONObject jsonObject = new JSONObject();

jsonObject.put("id", contact.getId());

jsonObject.put("name", contact.getName());

jsonObject.put("phone", contact.getPhone());

jsonArray.put(jsonObject);

}

return jsonArray.toString();

} catch (JSONException e) {

e.printStackTrace();

}

return null;

}

 

private final class Partner4javaJavaScript {

/**

* 获取所有联系人

*/

public void getContacts() {

handler.post(new Runnable() {

@Override

public void run() {

// 可以通过访问SQLite访问数据库获取

List<Contact> contacts = new ArrayList<Contact>();

contacts.add(new Contact(12, "王昌龙", "18701445755"));

contacts.add(new Contact(13, "小妾", "18701445755"));

webView.loadUrl("javascript:show('" + buildJson(contacts)

+ "')");

}

});

 

}

 

/**

* 生成Json格式的数据

* @param contacts

* @return

*/

private String buildJson(List<Contact> contacts) {

try {

JSONArray jsonArray = new JSONArray();

for (Contact contact : contacts) {

JSONObject jsonObject = new JSONObject();

jsonObject.put("id", contact.getId());

jsonObject.put("name", contact.getName());

jsonObject.put("phone", contact.getPhone());

jsonArray.put(jsonObject);

}

return jsonArray.toString();

} catch (JSONException e) {

e.printStackTrace();

}

return null;

}

/**

  * 回调方法

  * @param phone

  */

 public void call(final String phone){

  handler.post(new Runnable() {

   @Override

   public void run() {

    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ phone)));

   }

  });

 }

 

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值