http://yarin.iteye.com/?page=4

Activity01.java

package com.yarin.android.Examples_08_07;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView; public class Activity01 extends Activity {
private WebView mWebView;
private PersonalData mPersonalData; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mPersonalData = new PersonalData();
mWebView = (WebView) this.findViewById(R.id.WebView01);
// 设置支持JavaScript
mWebView.getSettings().setJavaScriptEnabled(true);
// 把本类的一个实例添加到js的全局对象window中,
// 这样就可以使用window.PersonalData来调用它的方法
mWebView.addJavascriptInterface(this, "PersonalData");
// 如果不设置这个,JS代码中的按钮会显示,但是按下去却不弹出对话框
// Sets the chrome handler. This is an implementation of WebChromeClient
// for use in handling JavaScript dialogs, favicons, titles, and the
// progress. This will replace the current handler.
mWebView.setWebChromeClient(new WebChromeClient() { @Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// TODO Auto-generated method stub
return super.onJsAlert(view, url, message, result);
} });
// 加载网页
// mWebView.loadUrl("file:///android_asset/PersonalData_new.html");
mWebView.loadUrl("file:///android_asset/PersonalData.html");
} // 在js脚本中调用得到PersonalData对象
@JavascriptInterface
public PersonalData getPersonalData() {
return mPersonalData;
} // js脚本中调用显示的资料
class PersonalData {
String mID;
String mName;
String mAge;
String mBlog; public PersonalData() {
this.mID = "123456789";
this.mName = "Android";
this.mAge = "100";
this.mBlog = "http://yarin.javaeye.com";
} public String getID() {
return mID;
} public String getName() {
return mName;
} public String getAge() {
return mAge;
} public String getBlog() {
return mBlog;
}
}
}

PersonalData_new.html

<html>
<head>
<script type="text/javascript">
function showAndroidToast(toast)
{
var personaldata_new = PersonalData.getPersonalData();
alert(personaldata_new);
var personaldata = window.PersonalData.getPersonalData();
if(personaldata)
{
var Personaldata = document.getElementById("Personaldata");
pnode = document.createElement("p");
tnode = document.createTextNode("ID:" + personaldata.getID());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Name:" + personaldata.getName());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Age:" + personaldata.getAge());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Blog:" + personaldata.getBlog());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
}
} function myFunction(){
console.log("Write a new Line");//调试信息
alert("Hello World!");
} </script>
</head>
<body>
<div id = "Personaldata">
<p> Personal Data </p>
<button onclick="myFunction()">click here!</button>
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
</div>
</body>
</html>

PersonalData.html

<html>
<head>
<script type="text/javascript">
function onload(){
var personaldata = window.PersonalData.getPersonalData();
if(personaldata)
{
var Personaldata = document.getElementById("Personaldata");
pnode = document.createElement("p");
tnode = document.createTextNode("ID:" + personaldata.getID());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Name:" + personaldata.getName());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Age:" + personaldata.getAge());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Blog:" + personaldata.getBlog());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
}
}
</script>
</head>
<body onload="javascript:onload()">
<div id = "Personaldata">
<p> Personal Data </p>
</div>
</body>
</html>

或者

<html>
<head>
<script type="text/javascript" src="test2.js">
</script>
</head>
<body onload="javascript:myFunction()">
<div id = "Personaldata">
<p> Personal Data </p>
<button onclick="myFunction()">click here!</button>
</div>
</body>
</html>

test2.js

function myFunction(){
var personaldata = window.PersonalData.getPersonalData();
if(personaldata)
{
var Personaldata = document.getElementById("Personaldata");
pnode = document.createElement("p");
tnode = document.createTextNode("ID:" + personaldata.getID());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Name:" + personaldata.getName());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Age:" + personaldata.getAge());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Blog:" + personaldata.getBlog());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
}
}

或者

<html>
<head>
<script type="text/javascript" src="test2.js">
</script>
</head>
<body><!-- onload="javascript:myFunction()"-->
<div id = "Personaldata">
<p> Personal Data </p>
<button onclick="myFunction()">click here!</button>
</div>
</body>
</html>

test2.js

window.onload= function(){
var personaldata = window.PersonalData.getPersonalData();
if(personaldata)
{
var Personaldata = document.getElementById("Personaldata");
pnode = document.createElement("p");
tnode = document.createTextNode("ID:" + personaldata.getID());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Name:" + personaldata.getName());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Age:" + personaldata.getAge());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
pnode = document.createElement("p");
tnode = document.createTextNode("Blog:" + personaldata.getBlog());
pnode.appendChild(tnode);
Personaldata.appendChild(pnode);
}
}

<script type="text/javascript" src="test2.js"/>android2.2兼容,但是android4.1.2不兼容。下面的才兼容android4.1.2

<script type="text/javascript" src="test2.js"></script>

4.2及以上版本必须在js调用的java方法加上@JavascriptInterface,4.1及以下版本不用加上注释。

Examples_08_07的更多相关文章

  1. 使用WebView出现web page not available

    很有可能是没有设置权限,所以不能浏览相应的URL,设置如下: 在AndroidManifest.xml中添加 <uses-permission android:name="androi ...

随机推荐

  1. 如何用angularjs制作一个完整的表格之四__自定义ng-model标签的属性使其支持input之外的html元素

    有的时候我们需要为非input类型的元素添加ng-model来实现双向的数据绑定,从而减少冗余代码,那么可以尝试一下的方式 例如:我页面中使用了contenteditable这个属性来实现用户可直接编 ...

  2. js join()函数将数组转换成字符串

    join() 方法用于把数组中的所有元素放入一个字符串.作用是将数组转换为字符串,其作用和toString()相同. 元素是通过指定的分隔符进行分隔的. 例如: var asp=['H','ell', ...

  3. python运维开发之第三天

    一.第二天课程的复习总结 1.列表可以增删改查,元组是不可修改的列表,字符串是不可以修改的. 2.列表,元组是有序的,字典是无序的,字典的key唯一 3.列表字典可以嵌套列表,可以嵌套字典,可以嵌套多 ...

  4. WebApi 4.0 默认方式不支持HttpGet 请求

    如果Controller方法中没有指定请求方式,在RC版本中默认是HttpPost ,Beta版本中支持所有方法GET, PUT, POST and Delete,而在RC版本后做了改变只支持Http ...

  5. Watchcow

    传送门 题目大意: 给你一幅连通的图,要求从起点1开始走,要经过每条边刚好两次,并且最终回到1起点. 思路:将无向图转换成有向图求欧拉回路. #include<cstdio> #defin ...

  6. Swift互用性:与 C的API交互(Swift 2.0版)-b

    节包含内容: 基本数据类型(Primitive Types) 枚举(Enumerations) 指针(Pointer) 全局常量(Global Constants) 预处理指令(Preprocesso ...

  7. SQL:将查询结果插入到另一个表的三种情况

    一:如果要插入目标表不存在: select * into 目标表 from 表 where ... 二:如果要插入目标表已经存在: insert into 目的表 select * from 表 wh ...

  8. yui datatable动态修改行号

    相关函数 getRecord  :YAHOO.widget.Record getRecord ( row ) For the given identifier, returns the associa ...

  9. HDOJ(HDU) 1977 Consecutive sum II(推导、、)

    Problem Description Consecutive sum come again. Are you ready? Go ~~ 1 = 0 + 1 2+3+4 = 1 + 8 5+6+7+8 ...

  10. Nodejs in Visual Studio Code 05.Swig+Bootstrap

    1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...