Android中WebView拦截js请求

<span style="font-family: 'Helvetica Neue', Helvetica, STHeiTi, 'Microsoft YaHei'; font-size: 16.9599990844727px; line-height: 27.1359977722168px; background-color: rgb(255, 255, 255);"></span>

Android中处理网页时我们必然用到WebView,这里我们有这样一个需求,我们想让WebView在处理网络请求的时候将某些请求拦截替换成某些特殊的资源。具体一点儿说,在WebView加载 http://m.sogou.com 时,会加载一个logo图片,我们的需求就是将这个logo图片换成另一张图片。

shouldInterceptRequest

好在Android中的WebView比较强大,从API 11(Android 3.0)开始, shouldInterceptRequest被引入就是为了解决这一类的问题。

shouldInterceptRequest这个回调可以通知主程序WebView处理的资源(css,js,image等)请求,并允许主程序进行处理后返回数据。如果主程序返回的数据为null,WebView会自行请求网络加载资源,否则使用主程序提供的数据。注意这个回调发生在非UI线程中,所以进行UI系统相关的操作是不可以的。

shouldInterceptRequest有两种重载。

  • public WebResourceResponse shouldInterceptRequest (WebView view, String url) 从API 11开始引入,API 21弃用
  • public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) 从API 21开始引入

本次例子暂时使用第一种,即shouldInterceptRequest (WebView view, String url)。

WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {

  @Override
  public WebResourceResponse shouldInterceptRequest(WebView view,  String url) {
      Log.i(LOGTAG, "shouldInterceptRequest url=" + url + ";threadInfo" + Thread.currentThread());
      WebResourceResponse response = null;
      if (url.contains("logo")) {
          try {
              InputStream localCopy = getAssets().open("droidyue.png");
              response = new WebResourceResponse("image/png", "UTF-8", localCopy);
          } catch (IOException e) {
              e.printStackTrace();
          }        
      }
      return response;
  }    
});
setContentView(webView);
webView.loadUrl("http://m.sogou.com");

其中WebResourceResponse需要设定三个属性,MIME类型,数据编码,数据(InputStream流形式)。

原文链接: http://ju.outofmemory.cn/entry/103239

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值