【问题标题】:How to debug a DEVICE-DEPENDENT WebView and/or WebViewClient anomaly?如何调试 DEVICE-DEPENDENT WebView 和/或 WebViewClient 异常?
【发布时间】:2011-12-06 13:20:26
【问题描述】:

在我的一堂课上,我打电话给WebView.postUrl()

getWebView().postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));

在 LG Optimus S 上完美运行,但在 HTC Nexus One 上由于某种原因无法运行。

“有效”是指目标站点以预期结果响应 postUrl() 查询,其特点是始终:

  1. 生成 两个 WebViewClient.onPageStarted() 调用,
  2. 后跟WebView.loadUrl()
  3. 后跟WebViewClient.onPageFinished()

然而,在罪魁祸首 Nexus One 上,只会生成第一个 WebViewClient.onPageStarted() 调用,之后再没有任何其他调用。

显然,WebView 和/或 WebViewClient 在不同设备上的行为不同,因为这两种设备运行完全相同的应用程序代码

(或者是网站对使用相同 WiFi 网关的不同设备的响应不同?)

两款设备运行完全相同的应用程序代码,但 Android 版本略有不同:LG 运行 2.3.3,N1 运行 2.2.1。

关于如何调试这个棘手问题的任何想法或提示?

例如,我可以在某处放置任何挂钩来追踪幕后的真实情况吗?

【问题讨论】:

    标签: android post webview http-post android-webview


    【解决方案1】:

    覆盖 WebViewClient 的 onReceivedSslError 和 onReceivedError。我猜这是 2.2 不信任某些 CA 的问题,或者是导致 SSL 证书中通配符域出现问题的错误 - 这两个特定错误都将在 onReceivedSslError 中捕获。

    如果调用这些方法中的任何一个,页面可能无法完成加载。

    如果没有任何错误,您的服务器可能会因为设备的 User-Agent 执行不同的操作 - 您可能需要手动设置。

    【讨论】:

    • 这是一个非常有用且非常需要的提示。我将实施并报告。同时 +1。
    • 好的,我带着初步结果回来了:我实现了onReceivedErroronReceivedSslError,因此它们只在LogCat 上记录了一些内容,并且......没有任何错误!我对没有任何onReceivedSslError 并不感到惊讶,因为它是一个简单的查询(不一定通过 SSL),但是根本没有收到错误的事实表明您的第二次猜测(服务器的用户代理依赖行为)可能成为罪魁祸首。很快就会对此进行试验。
    • 更新 2:我进行了一个快速实验,将 NA 上的 UA 伪装成与 LG 完全相同(使用 WebSettings.setUserAgentString):(奇怪的)行为保持不变!也就是说,网站没有回复postUrl()。我开始怀疑我自己的代码中存在错误......(这并不奇怪,但是当代码在除 N1 之外的所有手机上都表现良好时,我到底是如何找到它的?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2017-07-03
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多