首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拦截和覆盖来自WebView的HTTP请求

拦截和覆盖来自WebView的HTTP请求
EN

Stack Overflow用户
提问于 2011-01-24 18:23:22
回答 7查看 116K关注 0票数 65

我在我的应用程序中有一个WebView,其中打开了一些站点(总是相同的,它是我自己的页面)。该站点有一些JS代码,可以从远程主机加载一些图像。

我想截获对这样的图像的请求(通过URL模式),并返回我自己的内容(即另一个图像),或者根据内部应用程序逻辑保持请求不变。

这样做有可能吗?

编辑:问题的当前状态...

WebView能够设置WebViewClient (正如Axarydax所指出的那样)。WebViewClient有两个有用的方法

  • shouldOverrideUrlLoading
  • onLoadResource

如果加载是由页面交互触发的(例如,页面上的链接被单击,则WebView.loadURL("")不会触发此方法),则shouldOverrideUrlLoading能够拦截任何URL加载。它还可以通过返回false来取消URL加载。这种方法是不可用的,因为它不能拦截页面资源的加载(以及图像,我需要拦截的是这样的页面资源)。

onLoadResource会在每次页面资源(和图像!thx到Jessyjones)正在加载,但无法取消。这使得这种方法也不适合我的任务。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-03-03 22:16:11

看起来API level 11支持你所需要的东西。参见WebViewClient.shouldInterceptRequest()

票数 55
EN

Stack Overflow用户

发布于 2011-01-26 21:23:20

试试这个,我已经在一个类似维基的个人应用中使用过:

代码语言:javascript
运行
复制
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("foo://")) {
            // magic
            return true;
        }
        return false;
    }
});
票数 72
EN

Stack Overflow用户

发布于 2011-01-26 23:59:20

据我所知,shouldOverrideUrlLoading不是为图片调用的,而是为超链接调用的……我认为合适的方法是

@Override public void onLoadResource(WebView view, String url)

webview加载的每个资源(图像、样式表、脚本)都会调用此方法,但由于它是一个空的,我还没有找到一种方法来更改该url并替换它,以便加载一个本地资源……

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4780899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档