项目中遇到的webview的相关问题
2016-06-23 17:25
323 查看
1.webview的shouldOverrideUrlLoading和shouldInterceptRequest的使用:
shouldOverrideUrlLoading常用来做劫持处理,主要劫持的是url。(1)这个方法的功能显而易见,我们可以通过该方法来实现web和native的交互。比如拦截固定host的url,来做具体的native操作。(2)这个方法也可以用来过滤白名单。防止恶意攻击。恶意攻击一般分为两种,外部调起时传入加载url,如果被第三方换成他们的url,有可能就会被攻击。另外是数据拦截,把页面替换成他们的页面,也可能被攻击。我们过滤白名单一般可以通过过滤域名来判断是否可以加载。如果不是我们内部页面可以给用户以提示。(3)这个方法在手动调用WebView.loadUrl(url);时是不会被调用的,再进一步点击才会走这个方法。这点要注意。所以上边的白名单过滤的时候,也要在loadUrl时加判断shouldInterceptRequest主要是资源过滤。(1)这里我们常用作资源的缓存处理,比如图片的异步加载,js,css和图片等做缓存处理。(2)如果对资源要求比较严格,比如要进行资源的白名单校验时,可以把白名单写到这个方法里。2.WebViewClient的使用:
onPageStarted,onPageFinished,onReceivedError,onReceivedSslError这几个方法是我们经常用的一套加载处理。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | public class MyWebViewClient extends WebViewClient{ @Override public void onPageStarted(WebViewview,Stringurl,Bitmapfavicon){ //TODOAuto-generatedmethodstub super .onPageStarted(view,url,favicon); showLoading(); //显示加载页面 } @Override public boolean shouldOverrideUrlLoading(WebViewview,Stringurl){ mFail= false ; try { if (url.startsWith( "http:" )||url.startsWith( "https:" )||url.startsWith( "file:" )){ return handleWebRequest(url); //处理网络请求 } view.getContext().startActivity( new Intent(Intent.ACTION_VIEW,Uri.parse(url))); //其他情况由系统自己处理,比如打电话等操作,直接调用系统方法 return true ; } catch (Exceptione){ Log.e(TAG,e+ "" ); } return false ; } private boolean handleWebRequest(Stringurl){ //如果当前页面的加载地址为默认地址,则直接交给系统webView去loadurl即可 if (url.equals(mLoadUrl)){ return false ; } else { //url拦截,如果是调起native的要交由native处理 Uriuri=Uri.parse(url); Stringhost=uri.getHost(); Stringpath=uri.getPath(); Stringparams=uri.getQuery(); if (ConstantConfig.FE_HOST.equals(host)&&mInterceptPath.containsKey(path)){ handleIntercept(path,params); return true ; } return false ; } } private void handleIntercept(Stringpath,Stringparams){ StringnativePath=mInterceptPath.get(path); mJsInterface.dealAction( "jump" ,nativePath,params); } @Override public void onPageFinished(WebViewview,Stringurl){ Stringtitle=view.getTitle(); if (title!= null &&title.contains( "Errorreport" )){ //解决502页面显示 mFail= true ; } if (!mFail){ showNormal(); } else { showFail(); } } @Override public void onReceivedError(WebViewview, int errorCode,Stringdescription, StringfailingUrl){ mFail= true ; showFail(); } //处理证书异常,拦截ssl请求错误 @Override public void onReceivedSslError(WebViewview, SslErrorHandlerhandler,SslErrorerror){ //handler.proceed(); super .onReceivedSslError(view,handler,error); mFail= true ; showFail(); Stringmsg= "您访问的页面SSL证书异常" ; mLoadingView.statusToFail(msg); } }[/code] |
3.webview与native交互
[code]public
class
MyWebChromeClient
extends
WebChromeClient{
@Override
public
boolean
onJsPrompt(WebViewview,Stringurl,Stringmessage,StringdefaultValue,JsPromptResultresult){
Stringscheme=getResources().getString(R.string.qiangui_intercept_scheme);
if
(!TextUtils.isEmpty(message)&&message.startsWith(scheme)){
result.confirm();
Uriuri=Uri.parse(message);
StringactionType=uri.getHost();
Stringpath=uri.getEncodedPath();
StringpathStr=
null
;
if
(!TextUtils.isEmpty(path)){
pathStr=path.substring(
"/"
.length());
}
StringqueryParams=uri.getQuery();
StringactionContent=
null
;
if
(queryParams!=
null
){
actionContent=queryParams.substring(
"params="
.length());
}
mJsInterface.dealAction(actionType,pathStr,actionContent);//具体的native处理
return
true
;
}
return
super
.onJsPrompt(view,url,message,message,result);
}
}[/code]
4.WebView设置Cookie
相关文章推荐
- Android WebView 上传文件支持全解析
- android WebView组件使用总结
- 解决video标签在安卓webview下无法自动播放问题
- Android webview与js交换JSON对象数据示例
- android中WebView和javascript实现数据交互实例
- Android的webview支持HTML5的离线应用功能详细配置
- Android开发之WebView组件的使用解析
- Android中实现Webview顶部带进度条的方法
- Android WebView控件捕获用户输入的信息
- Android中访问证书有问题的SSL网页的方法
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- Android webview用法实例简析
- Android编程实现WebView自适应全屏方法小结
- Android编程使WebView支持HTML5 Video全屏播放的解决方法
- Android WebView无法弹出软键盘的原因及解决办法
- Android使用WebView播放flash的方法
- Android中WebView无法后退和js注入漏洞的解决方案
- Android编程实现WebView全屏播放的方法(附源码)
- Android开发之WebView输入框提示解决办法
- Android组件WebView编写有道词典小案例分享