【问题标题】:logging HTTP request start and finish from embedded Android WebView从嵌入式 Android WebView 记录 HTTP 请求的开始和结束
【发布时间】:2012-02-13 21:00:12
【问题描述】:

我正在寻找一种方法来记录嵌入式 web 视图发出的请求和开始/结束时间。到目前为止,除了 root 电话和运行 tcpdump 之外,我无法找到一种方法来做到这一点。这对我有用,但我需要在现场运行它,所以这并不可行。有很多方法可以记录 URL 和开始时间,但我看不到结束(或者,奖励,完整的响应元数据)。

如果我可以包装当前请求,shouldLoadResource 可以工作,但我必须自己获取它并使用 HTTP 支持才能将其整体返回,因为没有足够的 API 暴露来完全转发到内部请求。 (出于多种原因,我不想这样做,包括设备上的 webview 不使用与 HTTP 类相同的网络堆栈,并且因为它会改变子资源的时间。)

我一直在尝试找到打开 chromium_net 调试标志来执行此操作的方法,但我无法弄清楚如何在 WebView 或系统属性的上下文中执行此操作。

我真的不想发布自己的 webcore 来执行此操作,但如果需要...

【问题讨论】:

  • 只是检查...当您说“嵌入式 Web 视图”是您的应用创建的 Web 视图还是您以某种方式继承的 Web 视图?
  • 在我的应用中创建。在 API 允许的范围内,我控制水平和垂直。

标签: android performance webview android-webview


【解决方案1】:

覆盖方法shouldInterceptRequest()

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

    return super.shouldInterceptRequest(view, url);
}

【讨论】:

    【解决方案2】:

    在这种情况下,您还可以添加 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 仅在主框架中调用 - 它们不会为 iframe 或框架集调用。但这应该可以满足您的需求。

    【讨论】:

    • 对不起,我想我不清楚。我需要查看所有请求,而不仅仅是顶级页面的请求。图片、样式表、脚本、XHR 等。这就是为什么 shouldLoadResource 看起来很有希望。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2011-07-13
    • 2017-03-17
    • 1970-01-01
    • 2023-02-25
    • 2012-01-25
    相关资源
    最近更新 更多