Android WebView使用笔记

1.webview主要调用三个方法

a、LoadUrl        直接加载网页、图片并显示。(本地或是网络上的网页、图片、gif)

b、LoadData     显示文字与图片内容 (模拟器1.5、1.6)

c、LoadDataWithBase  显示文字与图片内容(支持多个模拟器版本)

2.webview通过getsettings方法来获取WebSetting对象,来对WebView进行一些设置

setJavaScriptEnabled(true); //支持js

setPluginsEnabled(true); //支持插件

setUseWideViewPort(false); //将图片调整到适合webview的大小

setSupportZoom(true); //支持缩放

setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局

supportMultipleWindows(); //多窗口

setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存

setAllowFileAccess(true); //设置可以访问文件

setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点

webview webSettings.setBuiltInZoomControls(true); //设置支持缩放

setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口

setLoadWithOverviewMode(true); // 缩放至屏幕的大小

setLoadsImagesAutomatically(true); //支持自动加载图片

3.WebView有两个方法setWebChromeClient和setWebClient

setWebChromeClient主要处理解析,渲染网页等浏览器做的事情

WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 

onCloseWindow(关闭WebView) 

onCreateWindow() 

onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出) 

onJsPrompt 

onJsConfirm 

onProgressChanged 

onReceivedIcon 

onReceivedTitle
例如:js中的alert,如果不重写onJsAlert方法,那么在webview中的alert事件是没有反应的,需要重写onJsAlert方法

private class MyWebChromeClient extends WebChromeClient {

		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

			Toast.makeText(MainActivity.this, "Alert", Toast.LENGTH_SHORT).show();
			return true;
			//这里返回true,值提示Alert,并且后续无法在弹出alert
		}
		
	}

private class MyWebChromeClient extends WebChromeClient {

		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

			Toast.makeText(MainActivity.this, "Alert", Toast.LENGTH_SHORT).show();
			return false;
			//这里返回false,值提示Alert,并且弹出alert弹窗,可多次点击
		}
		
	}

WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:

onLoadResource 

onPageStart 

onPageFinish 

onReceiveError 

onReceivedHttpAuthRequest 

4.webview和js交互

首先需要创建一个与js交互的对象,提供一些供js调用的方法

final class DemoJavaScriptInterface {

		DemoJavaScriptInterface() {
		}
		/**
		 * api17以上,必须要在被调用的方法上加上注解@JavascriptInterface
		 */
		@JavascriptInterface
		public void clickOnAndroid() {
			mHandler.post(new Runnable() {
				public void run() {
					mWebView.loadUrl("javascript:wave()");//js函数
				}
			});

		}
	}

注意:在API17以上的机器上运行,必须要在被调用的方法前加上注解@JavascriptInterface并且方法必须为publi修饰的

谷歌官方文档说明


创建对象以后,就为JS添加这个对象

mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
然后在Html文件中直接调用这个对象“demo”的方法就行了

onClick="window.demo.clickOnAndroid()"


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值