2012-02-13 29 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); 
}