WebView简介(JavaScripte篇)
来源:互联网 发布:ubuntu mate更改分辨率 编辑:程序博客网 时间:2024/06/11 17:21
如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
我 们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
package com.teleca.robin;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class WebViewDemoActivity extends Activity {
/** Called when the activity is first created. */
final static String tag="robin";
WebView mWebView;
Handler mHandler=new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webviewdemo);
mWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:wave()");
Log.i(tag,"clickOnAndroid");
}
});
}
}, "demo");
mWebView.loadUrl("file:///android_asset/demo.html");
}
}
assets\demo.html文件
<html>
<script language="javascript">
<!--
function wave() {
document.getElementById("droid").src="android_wave.png";
}
//-->
</script>
<body>
<a onClick="window.demo.clickOnAndroid()">
<img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
Hello,are you all right?
</a>
</body>
</html>
我 们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 “demo”,作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。
这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
这里还有几个知识点:
1) 为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法不要直接在里面运行,这里是使用 Handler来进行的。
原文:http://www.cnblogs.com/oakpip/archive/2011/04/10/2011165.html
程序英文原址:http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/
我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍,
这些我会在注释中一一讲解。
Javascript弹出框有如下三种:
JavaScript代码如下:
alert(); 或alert("alert");
window.confirm("Are you srue?");
window.prompt("Please input some word";,"this is text");
WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用, 或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。
在WebChromeClient中还有以下的方法:
Java代码
onProgressChanged(WebView view, int newProgress);
onReceivedIcon(WebView view, Bitmap icon);
onReceivedTitle(WebView view, String title);
onRequestFocus(WebView view);
onCloseWindow(WebView window);
onProgressChanged(WebView view, int newProgress)
这些方法的使用我会在以后的博文中讲到.
请大家先看今天讲解的重点
WebViewDemo2Activity.java文件
package com.teleca.robin;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;
public class WebViewDemo2Activity extends Activity {
/** Called when the activity is first created. */
final static String tag="robin";
WebView mWebView;
Handler mHandler=new Handler();
TextView mReusultText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webviewdemo2);
mReusultText = (TextView) findViewById(R.id.textView);
mWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = mWebView.getSettings();
mWebView.setWebChromeClient(new MyWebChromeClient());
webSettings.setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo2.html");
}
/**
* 继承WebChromeClient类
* 对js弹出框时间进行处理
*
*/
final class MyWebChromeClient extends WebChromeClient {
/**
* 处理alert弹出框
*/
@Override
public boolean onJsAlert(WebView view,String url, String message,JsResult result) {
Log.d(tag,"onJsAlert:"+message);
mReusultText.setText("Alert:"+message);
//对alert的简单封装
new AlertDialog.Builder(WebViewDemo2Activity.this).
setTitle("Alert").setMessage(message).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//TODO
}
}).create().show();
result.confirm();
return true;
}
/**
* 处理confirm弹出框
*/
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
Log.d(tag, "onJsConfirm:"+message);
mReusultText.setText("Confirm:"+message);
result.confirm();
return super.onJsConfirm(view, url, message, result);
}
/**
* 处理prompt弹出框
*/
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
Log.d(tag,"onJsPrompt:"+message);
mReusultText.setText("Prompt input is :"+message);
result.confirm();
return super.onJsPrompt(view, url, message, message, result);
}
}
}
- WebView简介(JavaScripte篇)
- Android webView 中调试javaScripte
- JAVASCRIPTE
- WebView简介(加速加载篇)
- WebView简介(基本显示篇)
- WebView简介(定制基本行为篇)
- WebView简介(加速加载篇)
- JavaScripte中的Prototype机制(一)
- WebView简介(联网权限)
- WebView简介(联网权限)
- WebView简介(联网权限)
- 【Android】【Webview】WebView 简介
- WebView 简介
- 简介WebView
- WebView简介
- # WebView简介 #
- webview简介
- JavaScripte最经典和权威的教程(基础入门)
- oracle入门命令
- MyEclipse 注册方法 (以MyEclipse6.5.1GA为例)
- java编程思想第2章:一切都是对象
- 求解模线性方程
- pthread_cond
- WebView简介(JavaScripte篇)
- 程序员面试题精选100题(07)-翻转句子中单词的顺序[算法]
- Java 平台中的增补字符
- Android启动脚本init.rc
- WebView与JavaScript的交互
- C and point lessen 1
- IIS7.5部署错误
- 线性表初始化、插入、删除操作
- 常见排序算法(冒泡,选择,快速)的C语言实现