我在我的应用程序中打开了一些网站(总是相同的,它是我自己的网页)中的WebView。该网站有一些JS代码从远程主机加载一些图像。拦截并覆盖来自WebView的HTTP请求
我想拦截对这些图像的请求(通过URL模式)并返回我自己的内容(即另一图像),或者根据内部应用程序逻辑保留请求不变。
有没有可能这样做?
EDIT:问题的当前状态...
WebView
具有设置的能力的WebViewClient
(如由Axarydax说明)。 WebViewClient
有两个有用的方法
shouldOverrideUrlLoading
onLoadResource
shouldOverrideUrlLoading
能够拦截任何URL负载,负载是通过网页的交互触发(即页面上的链接被点击,WebView.loadURL (“”)不会触发此方法)。它也可以通过返回false来取消URL加载。这种方法是不可用的,因为'它不能拦截加载页面资源(和图像,我需要拦截,是这样一个页面资源)。
onLoadResource
每当页面资源(和images!thx to jessyjones)被加载时触发,但是没有办法取消它。这使得这种方法也不适合我的任务。
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("foo://")) {
// magic
return true;
}
return false;
}
});
好吧,这是拦截调用的方式(顺便说一句,如果我的网页加载一个图像,而不是做一个完整的重新加载它会触发?),但我如何提供由我的Java代码生成的拦截调用的响应? – Olegas 2011-01-26 14:54:54
您可以使用WebView的loadData()方法将一些html推入其中。用法:webView.loadData(“ ...”,“text/html”,“utf-8”); – Axarydax 2011-01-28 13:57:42
不适用。通过loadData加载的静态内容无法访问通过网络加载的其他内容。作为解决方法loadData(“javascript:....”)可用于(与某些“客户”代码交互)。如果为每个页面资源(完全内容图像)调用shouldOverrideUrlLoading,这可能是一个很好且适合的问题。但事实并非如此。 – Olegas 2011-01-29 10:29:51