【移动应用开发技术】Android WebView拦截iframe标签内部跳转的示例分析_第1页
【移动应用开发技术】Android WebView拦截iframe标签内部跳转的示例分析_第2页
【移动应用开发技术】Android WebView拦截iframe标签内部跳转的示例分析_第3页
【移动应用开发技术】Android WebView拦截iframe标签内部跳转的示例分析_第4页
【移动应用开发技术】Android WebView拦截iframe标签内部跳转的示例分析_第5页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】AndroidWebView拦截iframe标签内部跳转的示例分析

在下给大家分享一下AndroidWebView拦截iframe标签内部跳转的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。最近项目里有个广告位需要动态配置,后台给了一段html嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理。比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击该网址的时候做拦截,自己做处理而不是跳转。<html>

<iframe

src="/"

frameborder='0'

scrolling='no'

width='100%'

height='300'>

</iframe>

</html>oh,我还是第一次知道iframe标签,不过想着应该和普通拦截h6差不多,兴致勃勃的就开始撸代码了,但是无论怎么配置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("")){

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)

{

sslErrorHceed();

//

接受所有网站的证书

}

@Override

public

boolean

shouldOverrideUrlLoading(WebView

view,

WebResourceRequest

request)

{

if

(request.getUrl().toString().contains("")){

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("//")){

toast("拦截到了"

+

url);

Intent

intent

=

new

I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论