在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
看一个实例:
view plaincopy to clipboardprint?
01.public class WebViewDemo extends Activity {
02. private WebView mWebView;
03. private Handler mHandler = new Handler();
04.
05. public void onCreate(Bundle icicle) {
06. super.onCreate(icicle);
07. setContentView(R.layout.webviewdemo);
08. mWebView = (WebView) findViewById(R.id.webview);
09. WebSettings webSettings = mWebView.getSettings();
10. webSettings.setJavaScriptEnabled(true);
11. mWebView.addJavascriptInterface(new Object() {
12. public void clickOnAndroid() {
13. mHandler.post(new Runnable() {
14. public void run() {
15. mWebView.loadUrl("javascript:wave()");
16. }
17. });
18. }
19. }, "demo");
20. mWebView.loadUrl("file:///android_asset/demo.html");
21. }
22.}
我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。
<html>
<mce:script language="javascript"><!--
function wave() {
document.getElementById("droid").src="android_waving.png";
}
// --></mce:script>
<body>
<a onClick="window.demo.clickOnAndroid()">
<img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
Click me!
</a>
</body>
</html>
这样在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的目的。
分享到:
相关推荐
直接下载可以运行, android studio 工具开发, webview引用的本地页面 或者远程页面调用android 摄像头, 通过zxing解析包 进行二维码解析
解析XMl,并用JSON在页面显示。资源共享,希望互相学习;注:在ubuntu上做的,在windows在可能会出现乱码!
然后给webView 设置WebChromeClient WebChromeClient 主要处理解析,渲染网页等浏览器做的事情 设置完毕后 重写WebChromeClient 的openFileChooser方法即可实现h5调用手机摄像头了。 但是这个方法的使用却不简单,...
android解析pdf使用webview展示,放在src/main/assets目录下
在Webview中长按页面识别二维码带自动解析。相信你一定会有收获!
MarkdownView - 支持Markdown渲染的WebView实现
最近几个项目的测试结果,Android无法主动通过调用 webview.loadUrl(“[removed]”+callbackFunction+”(‘”+data+”‘)”); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象。与此同时...
传递过程中android端调用的最重要的一个函数就是: addJavascriptInterface(new MyObject(this,”dd”),”my”); 这个函数有两个参数,第一个参数传入的是含有实现了JavaScript中的方法,并且使用@...
WebView的基本使用方法,全部解析都有,可以下载查看。
1.android中利用webview调用网页上的js代码。Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:...
webView调用JS出错。 代码如下: class TestJS { …… public TestJS(){ } public void save(String data){ webView.loadUrl(“[removed] alert(” + data +”)”); } …… } ...
主要针对Android WebView 上传文件支持进行全面解析,感兴趣的小伙伴们可以参考一下
近来工作中也要用到HTML5离线应用功能,由于是在Android平台上做,所以自然而然的选择Webview来解析网页。但如何使Webivew支持HTML5离线应用功能呢,经过反复摸索和上网查找资料,反复做试验终于成功了。首先需配置...
WebView可所谓是Android中最强大的控件之一,无所不能。 于是有这么一个需求,用户在app之中内嵌的WebView中输入帐号密码的时候,App需要捕获已经输入的帐号密码。 当用户输入帐号密码,一般情况下会进行页面转跳,...
基于和WebView的Android Markdown View。 预习 特征 自动调整系统主题 代码突出显示( ) HTML KaTeX( 和 ) 容器(信息,成功,警告,错误) 用法 设置 将其添加到存储库末尾的root build.gradle中(适用于较...
WebView 类是 WebKit 模块 Java 层的视图类, 所有需要使用 Web 浏览功能的Android应用程序都要创建该视图对象显示和处理请求的网络资源,接下来将详细介绍,需要了解的朋友可以参考下
在android开发webview的时候,有的时候后台不一定给的就是一个url,而是把一些HTML,css,js语言代码给你,然后你自行组装出webview能够识别的语言,并加载到页面当中。 加载html无非有三种情况:一、存放在assets...