2012-02-13 31 views
6

我正在尋找一種方法來記錄由嵌入式webview所做的請求和開始/結束時間。除了根植電話和運行tcpdump之外,目前我還無法找到一種辦法。這對我很有用,但我需要在現場運行,所以這不是真正可行的。有很多方法可以記錄URL和開始時間,但我看不到完成(或獎金,完整響應元數據)。從嵌入式Android WebView記錄HTTP請求開始和完成

如果我可以包裝當前的請求,shouldLoadResource可以工作,但是我必須使用HTTP支持自己獲取它才能集體返回它,因爲沒有足夠的API公開以完全轉發內部請求。 (我不想這麼做,原因很多,其中包括設備上的webview不使用與HTTP類相同的網絡堆棧,並且因爲它會更改子資源的時間。)

I'一直試圖找到方法來打開鉻_net調試標誌來做到這一點,但我無法弄清楚在WebView或系統屬性的上下文中如何做到這一點。

我真的寧可不發貨我自己的WebCore要做到這一點,但如果需要,必須...

+0

只是檢查...當你說「嵌入式網頁視圖」是您的應用程序創建一個網頁視圖或者一個你以某種方式繼承? – Torid 2012-02-13 21:13:30

+0

在我的應用程序中創建。在API允許的範圍內,我控制水平和垂直。 – shaver 2012-02-13 21:33:15

回答

0

在這種情況下,你還可以添加一個WebViewClient(見http://developer.android.com/reference/android/webkit/WebViewClient.html)。這看起來像

WebView webView.setWebViewClient(new MyWebViewClient()); 

. 
. 
. 

public class MyWebViewClient extends WebViewClient 
{ 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
    { 
    // Note time 

    // Return false to say we want the WebView to handle the url. 
    return false; 
    } 

    @Override 
    public void onPageFinished (WebView view, String url) 
    { 
    super.onPageFinished(view, url); 

    // Note time 
    } 
} 

注意兩個shouldOverrideUrlLoading和onPageFinished只叫只針對主框架 - 他們不會被調用的I幀或框架集。但是這應該給你你需要的東西。

+0

對不起,我想我不清楚。我需要查看所有請求,而不僅僅是頂級頁面的請求。圖片,樣式表,腳本,XHR等。這就是爲什麼shouldLoadResource看起來很有前途。 – shaver 2012-02-23 20:26:25

2

覆蓋方法shouldInterceptRequest()

@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
    Log.d(LOG_TAG, "shouldInterceptRequest: " + url); 

    return super.shouldInterceptRequest(view, url); 
}