最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理。

比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击该网址的时候做拦截,自己做处理而不是跳转。

oh,我还是第一次知道iframe标签,不过想着应该和普通拦截h5差不多,兴致勃勃的就开始撸代码了,但是无论怎么配置WebView,还是重写 shouldOverrideUrlLoading ,就是拦截不了iframe里的网址。。。后来研(bai)究(du)了很久,终于拦截到了。

实现方法:

首先,你的WebView要 setWebViewClient ,重写

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.jb51.net")){

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.jb51.net")){

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标签内部跳转教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

android html拦截广告,Android WebView拦截iframe标签内部跳转教程相关推荐

  1. android 网易item广告,Android仿网易严选商品详情页

    仿照网易严选商品详情页面,整个页面分为两个部分,上面一部分是Native的ScrollView,下面一部分则是WebView,其目的是为了可以进行分步加载.滑动到ScrollView底部时,继续向上拖 ...

  2. android 启动画面广告,Android 应用启动欢迎界面广告的实现实例

    Android 应用启动欢迎界面广告 0.写在前面 在这篇教程中来实现一个类似于微信的的延迟3秒再进入主界面的效果. 1.项目准备 先新建一个空的android项目.里面只自带一个MainActivi ...

  3. android放大镜无广告,Android放大镜的实现代码

    快三个月了没写博客了,因为工作调动,很多经验.心得都没有时间记录下来.现在时间稍微充裕了点,我会尽量抽时间将之前想写而没写的东西补上.进入正题. 去年某个时候,我偶然看到一篇文章,讲android里面 ...

  4. android仿头条广告,Android仿今日头条手界面

    public class MyIndicator extends HorizontalScrollView implements ViewPager.OnPageChangeListener { pr ...

  5. android html拦截广告,android去除webview加载的html中的底部广告

    目前自己在做一个视频app,资源使用第三方的视频html,但是发现有有的视频资源html有广告,所以就有了这篇记录 找到的这个有广告的html,底部广告是动态的添加到网页底部的 方式一 :onPage ...

  6. Android中利用Jsoup让WebView清除Html标签并让图片适应大小并居中

    在App应用中,我们常常会加载一些新闻.通知等内容,这些内容很多来自于数据库中存储的HTML文本,里面的标签杂乱不堪,且内容中又包括图片等. 处理这些内容,我们可以利用正则表达式来处理,但标签太多,太 ...

  7. android自带的webview有广告,android webview 拦截广告

    要想对Webview实现一些高级操作,需要使用WebViewClient,下面是关于Webview的几个常用回调函数: 1.public boolean shouldOverrideUrlLoadin ...

  8. android webview拦截加载离线文件

    概述 客户端经常会通过使用webview来用H5实现一些ios与android双端都有的功能,最常见的比如一些活动页面,内部广告页面等. 这些页面大概会有以下几个特点: 要求webview快一些,白屏 ...

  9. android webview 拦截响应,android WebView拦截请求详解

    1.WebView基本用法 WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限.我也简单了写了一个加载百度的 ...

最新文章

  1. ThinkPHP 3.2 中获取所有函数方法名,以及注释,完整可运行
  2. 水稻微生物组时间序列分析精讲1-模式图与主坐标轴分析
  3. 计算机硬件与游戏发展史,电脑硬件的发展历程中 什么是电竞SSD?
  4. oracle flashback table 参数,Oracle10g中FLASHBACK TABLE语句恢复DML误操作
  5. 基于Spring框架的Shiro配置
  6. 解决python中TypeError: not enough arguments for format string
  7. java导入日期处理,java实现Excel表格的导入日期变成数字的问题
  8. python应用系列教程——python操作office办公软件word
  9. Spark2.1.0——运行环境准备
  10. [翻译]Popfly系列课程7 –深入幕后:使用 Popfly学习XML的初学者指南
  11. 虚幻引擎外部模型及动画导入
  12. linux 切换gnome kde桌面,科学网—openSUSE15.1切换桌面环境(从Gnome至KDE Plasma) - 潘林的博文...
  13. JVM 为什么使用元空间替换了永久代?
  14. c语言程序设计if函数题目,if函数套用练习题.doc
  15. GLib核心应用支持
  16. 【天光学术】物流工程论文:连锁超市缺货和爆仓库存问题改善分析(节选)
  17. matlab傅里叶级数展开
  18. 教你如何一键下载汽车之家作者的所有无水印视频
  19. 天翼云解析工具-获取文件直链PHP源码
  20. SOHO 3Q众包佣金上调到15% 移动办公掀热潮

热门文章

  1. Linux系统屏幕出现错位重影,uv打印时出现重影错位故障怎么办?
  2. RFC 是什么含义?
  3. Python初级爬虫(利用多任务协程爬取虎牙MM图片)
  4. 青年PM倪超:想让程序员多一点点幸福感 1
  5. Oracle MTS简介
  6. 麦芽硒维e片官网的下单流程
  7. Puzzled Elena
  8. 广式月饼的做法(100g月饼制作教程)
  9. SymmetricDS文档翻译--【Chapter 3. 详细配置(Configuration)[section B]】
  10. 搭档之家:华为手机“秒售罄”炒上6万! 小米等多家折叠屏布局明年