这篇文章主要介绍了Android WebView拦截iframe标签内部跳转教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理。
比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击该网址的时候做拦截,自己做处理而不是跳转。
<html>
<iframe src="bCZndDsNCjwvY29kZT48L3ByZT4NCjwvZGl2Pg0KPHA+b2gs5oiR6L+Y5piv56ys5LiA5qyh55+l6YGTaWZyYW1l5qCH562+77yM5LiN6L+H5oOz552A5bqU6K+l5ZKM5pmu6YCa5oum5oiqaDXlt67kuI3lpJrvvIzlhbToh7Tli4Pli4PnmoTlsLHlvIDlp4vmkrjku6PnoIHkuobvvIzkvYbmmK/ml6DorrrmgI7kuYjphY3nva5XZWJWaWV377yM6L+Y5piv6YeN5YaZIHNob3VsZE92ZXJyaWRlVXJsTG9hZGluZyDvvIzlsLHmmK/mi6bmiKrkuI3kuoZpZnJhbWXph4znmoTnvZHlnYDjgILjgILjgILlkI7mnaXnoJQoYmFpKeeptihkdSnkuoblvojkuYXvvIznu4jkuo7mi6bmiKrliLDkuobjgII8L3A+DQo8cD48c3Ryb25nPuWunueOsOaWueazle+8mjwvc3Ryb25nPjwvcD4NCjxwPummluWFiO+8jOS9oOeahFdlYlZpZXfopoEgc2V0V2ViVmlld0NsaWVudCAs6YeN5YaZPC9wPg0KPGRpdiBjbGFzcz0="topstudy">
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {} 方法,然后setWebChromeClient,重写onCreateWindow方法,在里面创建新的WevView,加入到webView里,给新的webView setWebViewClient,再重写shouldVeerrideUrlLoading方法,在这里拦截。
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView newWebView = new WebView(getActivity());
webView.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
newWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
//TODO 在这里实现你的拦截方法
if (url.contains("https://www.mobange.com")){
toast("拦截到了" + url);
Intent intent = new Intent(getActivity(), CommonWebViewActivity.class);
intent.putExtra("url",url);
startActivity(intent);
}else {
webView.loadUrl(url);
}
return true;
}
});
return true;
}
});
完整的代码如下:
private void initWebView(WebView webView) {
//启用支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setSupportZoom(false); //支持缩放
settings.setBuiltInZoomControls(false); //支持手势缩放
settings.setDisplayZoomControls(false); //是否显示缩放按钮
settings.setDefaultTextEncodingName("utf-8"); //设置文本编码
settings.setUseWideViewPort(false); //将图片调整到适合WebView的大小
settings.setLoadWithOverviewMode(true); //自适应屏幕
settings.setDomStorageEnabled(true);
settings.setSaveFormData(true);
settings.setSupportMultipleWindows(true);
settings.setAppCacheEnabled(true);
settings.setPluginState(WebSettings.PluginState.ON);//支持插件
settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //不适用缓存
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//支持内容重新布局
webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // 取消WebView中滚动或拖动到顶部、底部时的阴影
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 取消滚动条白边效果
// >= 19(SDK4.4)启动硬件加速,否则启动软件加速
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
settings.setLoadsImagesAutomatically(true); //支持自动加载图片
} else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
settings.setLoadsImagesAutomatically(false);
}
webView.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.w("webView==onLoadResource===url=" + url);
}
@Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
sslErrorHandler.proceed(); // 接受所有网站的证书
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().contains("http://www.baidu.com")){
toast("拦截到了baidu");
}else {
webView.loadUrl(request.getUrl().toString());
}
return true;
}
});
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView newWebView = new WebView(getActivity());
webView.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
newWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url.contains("//www.mobange.com")){
toast("拦截到了" + url);
Intent intent = new Intent(getActivity(), CommonWebViewActivity.class);
intent.putExtra("url",url);
startActivity(intent);
}else {
webView.loadUrl(url);
}
return true;
}
});
return true;
}
});
}
以上这篇Android WebView拦截iframe标签内部跳转教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:Android WebView拦截iframe标签内部跳转教程


猜你喜欢
- Flutter实现底部和顶部导航栏 2022-08-31
- Android实现监听音量的变化 2023-03-30
- Android studio实现动态背景页面 2023-05-23
- Android实现轮询的三种方式 2023-02-17
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- 详解flutter engine 那些没被释放的东西 2022-12-04