您的位置:首页 > 移动开发

WebView简介(联网权限)

2016-11-04 14:49 267 查看
WebView简介(联网权限)

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用WebKit渲染引擎加载显示网页

当前主流的浏览器内核

Trident Gecko WebKit Prosto

实例化WebView的对象 (1)webview=new WebView(context); setContentView(webview); (2)setContentView (R.layout.activityjavacall_javascript); webview = (WebView) findViewById(R.id.webview);

设置显示的网页

webview.loadUrl

webview.loadData

webview.loadDataWithBaseURL

用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面 //设置回退 //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); //goBack()表示返回WebView的上一页面 return true; } return false; }

如果访问的页面中有Javascript,则webview必须设置支持Javascript。 WebSettings webSetting = webview.getSettings(); webSetting.setJavaScriptEnabled(true);

如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。

webview.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}


});

如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。 webview.requestFocusFromTouch();

原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。

1、设置WebView的DownloadListener: webView.setDownloadListener(new MyWebViewDownLoadListener());

2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:

private class MyWebViewDownLoadListener implements DownloadListener {

// 这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载

@Override

public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,

long contentLength) {

Uri uri = Uri.parse(url);

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

}

}

WebSettings的常用方法介绍

setJavaScriptEnabled(true);

//支持js脚步

setPluginsEnabled(true);

//支持插件

3 setUseWideViewPort(false);

//将图片调整到适合webview的大小

4 setSupportZoom(true);

//支持缩放

5 setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

//支持内容从新布局

6 supportMultipleWindows();

//多窗口

7 setCacheMode(WebSettings.LOADCACHEELSE_NETWORK);

//关闭webview中缓存

8 setAllowFileAccess(true);

//设置可以访问文件

9 setNeedInitialFocus(true);

//当webview调用requestFocus时为webview设置节点

webSettings.setBuiltInZoomControls(true);

//设置支持缩放


10 setJavaScriptCanOpenWindowsAutomatically(true);

//支持通过JS打开新窗口

11 setLoadsImagesAutomatically(true);

//支持自动加载图片

WebViewClient的方法全解

1 doUpdateVisitedHistory(WebViewview,Stringurl, boolean isReload)

(更新历史记录)

2 onFormResubmission(WebViewview,MessagedontResend,Messageresend)

(应用程序重新请求网页数据)

3 onLoadResource(WebViewview,Stringurl)

在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。

4 onPageStarted(WebViewview,Stringurl,Bitmapfavicon)

这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告

诉用户程序在等待网络响应。


5 onPageFinished(WebViewview,Stringurl)

在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关

闭loading 条,切换程序动作。

6 onReceivedError(WebViewview, int errorCode, Stringdescription,StringfailingUrl)

(报告错误信息)

7 onReceivedHttpAuthRequest(WebViewview,HttpAuthHandlerhandler,Stringhost,

Stringrealm)(获取返回信息授权请求)

8 onReceivedSslError(WebViewview,SslErrorHandlerhandler,SslErrorerror)

重写此方法可以让webview处理https请求。

9 onScaleChanged(WebViewview, float oldScale, float newScale)

(WebView发生改变时调用)

10 onUnhandledKeyEvent(WebViewview,KeyEventevent)

(Key事件未被加载时调用)

11 shouldOverrideKeyEvent(WebViewview,KeyEventevent)

重写此方法才能够处理在浏览器中的按键事件。

12 shouldOverrideUrlLoading(WebViewview,Stringurl)

在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做 很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。

显示视图

1.loadUrl 1 网络内容 LoadUrl直接显示网页内容(单独显示网络图片) 2APK包内文件 LoadUrl显示APK中Html和图片文件

(1)把网页写在工程根目录下的assets目录下 webview.loadUrl(“file:///android_asset/JavaCallJS1.html”); (2)网页 webview.loadUrl(“http://10.0.2.2:8080/JavaCallJS1.html“); 2. webview.loadData 1 网络内容 LoadData显示中文网页内容(含空格的处理) 2APK包内文件 LoadData(loadDataWithBaseURL)显示APK中图片和文字混合的Html内容 注意 : css中经常用’#’, ‘%’, ‘\’,’?’等字符,我们需要用UrlEncoder编码为%23, %25, %27, %3f 。loadData()中的html data中不能包含’#’, ‘%’, ‘\’, ‘?’四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码。

webview.loadDataWithBaseURL data为string类型的html代码 1 webView.loadData(URLEncoder.encode(data, “utf-8”), “text/html”, “utf-8”); 这样一些背景效果什么的都不怎么好看了。不推荐。 2 webView.loadDataWithBaseURL(null,data, “text/html”, “utf-8”, null); 这样就会完美解析了。

java调用js

webview.loadUrl(“javascript:javaCallJs()”); javaCallJs()//是

function javaCallJs(){

document.getElementById("content").innerHTML +=
"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: