我在我的應用程序中打開了一些網站(總是相同的,它是我自己的網頁)中的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