Android中使用webview和web页面的一些交互

              一般来说,比较成熟的公司,android的native开发和webview中内嵌的web页面开发是分离的。Android可以使用webview来呈现web端的页面效果,在app设计的时候,适当情况下使用webView是一种轻耦合的页面展现。

             1.webView和javascript的交互:

             (1)web执行native代码,示例:

        private class MyJavaScript{
       		public void setText(String data) {
        		//TODO add your code here
		}
	}

        //将这个接口在webview中进行注册:
	MyJavaScript javaScript = new MyJavaScript();
	//此处的 "js" 为任意字符串,是在html中调用时引用
	webView.addJavascriptInterface(javaScript, "js");

        //在html中定义js代码
	//关键是代码: javascript:window.jd.setText('sth')  "js" 为上述注册的 MyJavaScript 的引用名
	//这里将调用上述 java 代码中 MyJavaScript 中的 getText(String data) 方法,从而达到 web 向 native 主动传值的方法
	<input id="test1" type="text" οnclick="javascript:window.js.setText('hello word')" value="hello world"/>

              (2)native调用js改变web页面元素         

       //在 html 中定义用具接收 native 传值调用的 js

	<script language="javascript" type="text/javascript">
		function setText(text){
			document.getElementById('sth').value=text;
		}
	</script>

       //在 native 中主动调用执行上述的 js
	webView.loadUrl("javascript:setText('hello world')");
       2.webView拦截特殊url.

          可以根据不同的uri的schema做不同处理,例如识别出camera://,调用手机的相机功能进行拍照。示例如下:

               webView.setWebViewClient(new WebViewClient() {

			/**
			 * 返回true阻止浏览器处理
			 */
			private boolean checkUrl(String url) {
				Uri uri = Uri.parse(url);
				String schema = uri.getScheme();
				if(schema.contains("camera"){
				  //TODO 
 				  return true;
				}
				return false;
			}

			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				
				if (checkUrl(Uri.parse(url))) {
					return true;
				} else {
					return super.shouldOverrideUrlLoading(view, url);
				}
			}

			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				
				if (checkUrl(Uri.parse(url))) {
					webView.stopLoading();
					return;
				} 
				super.onPageStarted(view, url, favicon);

			}

			@Override
			public void onPageFinished(WebView view, String url) {
				super.onPageFinished(view, url);
			}

			@Override
			public void onReceivedError(WebView view, int errorCode, String description, final String failingUrl) {
				super.onReceivedError(view, errorCode, description, failingUrl);
			}

		});

 


              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值