@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, String url) {
if (url.contains(".js")) {
return getWebResourceResponseFromString();
} else {
return super.shouldInterceptRequest(view, url);
private WebResourceResponse getWebResourceResponseFromString() {
return getUtf8EncodedWebResourceResponse(new StringBufferInputStream("alert('!NO!')"));
private WebResourceResponse getUtf8EncodedWebResourceResponse(InputStream data) {
return new WebResourceResponse("text/css", "UTF-8", data);
该方法通知主机应用程序资源请求,并允许应用程序返回数据。如果返回值为null
,则WebView
会照常继续加载资源。否则,将使用返回响应和数据。上面的代码拦截了JavaScript
资源(.js
)的请求,并返回一个警报,而不是请求的资源。
请参阅:WebViewClient shouldOverrideUrlLoading和shouldInterceptRequest
1.webview的shouldOverrideUrlLoading和shouldInterceptRequest的使用:
shouldOverrideUrlLoading常用来做劫持处理,主要劫持的是url。
(1)这个方法的功能显而易见,我们可以通过该方法来实现web和native的交互。比如拦截固定host的url,来做具体的native操作。
(2)这个方法也可以用来过滤白名单。
一. shouldOverrideUrlLoading的含义
Sdk中的解释
public boolean shouldOverrideUrlLoading (WebView view, String url)Added in API level 1.
Give the host application a chance to take over the control when a n
h5页面请求如.js等资源文件的时调用,可以截取并更换资源文件(用native资源替换h5页面的资源)。
一个h5页面可能会有多个资源文件请求。
public WebResourceResponse shouldInterceptRequest(WebView view,WebResourceRequest request)
当前webview要加载下一个h5页面时调用,可以截取并通
shouldOverrideUrlLoading(拦截url加载,除资源请求的url) shouldInterceptRequest(拦截所有url请求)
WebView 的 shouldInterceptRequest 可以让我们监听WebView发出的请求并做相应的处理,但有个严重的问题:浏览器的渲染以及资源加载都是在一个线程中,如果在shouldInterceptRequest 处理时间过长,WebView界面就会阻塞,这是非常非常不好的。
本人最近遇到个问题,用WebView做显示,里面有个别特定url的图片需要做特殊的加载处理。所...
WebView 的 shouldInterceptRequest 可以让我们监听WebView发出的请求并做相应的处理,但有个严重的问题:浏览器的渲染以及资源加载都是在一个线程中,如果在shouldInterceptRequest 处理时间过长,WebView界面就会阻塞,这是非常非常不好的。
本人最近遇到个问题,用WebView做显示,里面有个别特定url的图片需要做特殊的加载处理
public boolean shouldOverrideUrlLoading (WebView view, String url) 是一个在 WebViewClient 类中定义的方法,网上有的博客说该方法的作用是当返回值是 true 的时候控制 Url 在当前 WebView 打开,为 false 时调用系统浏览器或第三方浏览器打开。但实际上这种说法是错误的。
webView = (WebView) findViewById(R.id.webView);
//WebView加载web
Android WebView的缓存机制就不多说了,这里是单独自己拦截css,js和图片等自己进行缓存。
需求:Android客户端需要拦截网页的每个css,js,图片等,然后根据实际情况判断来使用本地存储卡或者assets中的js,css和图片资源。
方式一:拦截后使用留存储到外部存储,然后使用流读取外部存储的文件
原理:使用shouldOverride
Android WebView 的shouldOverrideUrlLoading方法不被调用
webView使用还是很频繁的,尤其是电商、导购类app,他们需要用webview加载购物页面、活动页面等,然后有一些特殊需求需要拦截加载的url。都知道,要想拦截url,我们必须重写shouldOverrideUrlLoading这个方法
问题来了:shouldOverrideUrlLoading方法...
Android.mk和Android.bp都是Android系统中的构建文件,但是它们之间存在一些区别。
Android.mk是Android系统早期版本使用的一种构建系统,使用makefile语法,主要用于描述如何编译和链接Android应用程序或库。在Android.mk中,开发人员需要手动指定每个源文件、头文件、库、编译选项等。虽然Android.mk功能强大,但是随着Android系统的不断发展,它已经不再适用于大型的Android项目。
Android.bp是Android系统最新的构建系统,使用一种名为Blueprint的语言编写,它是一种更简洁、易于维护的语言,可以自动处理依赖关系、编译选项等。与Android.mk不同,Android.bp使用模块化的方式组织代码,并且支持跨平台构建,可以在Linux、Windows和Mac OS上构建Android代码。此外,Android.bp还支持构建Android应用程序、库、模块和系统映像等。
总之,Android.bp是Android系统的新一代构建系统,它比Android.mk更加灵活、高效、易于维护,并且支持跨平台构建,已经成为Android系统的标准构建系统。