【问题标题】:Detect and append POST parameters in Android WebView在 Android WebView 中检测并附加 POST 参数
【发布时间】:2012-12-20 10:09:13
【问题描述】:

我正在开发一个严重依赖互联网内容的 Android 应用。在应用程序中,我有一个 WebView,可让用户浏览我们的安全网站。这很好用。然而有时我们需要在我们的原生应用程序中触发一个方法。

为此,我们需要在用户提交表单时拦截 POST 请求,查找特定参数,如果该参数存在,则在提交之前将另一个参数附加到 POST 请求。

我们的应用支持较旧的 API 非常重要。至少 API 级别 8。在 iOS 中,这是小菜一碟。我们只是截获了 URL 请求并附加了我们的 url 编码参数。然而,在 Android 中,这要困难得多。如果不对我们的网站进行任何更改,我无法找到拦截请求的方法。

我尝试过覆盖 webviews loadUrl() 方法和 postUrl() 方法,但是当用户与 webview 中的 href 交互时,它们似乎没有被调用。我们要查找的具体参数可以来自不同的 url,因此覆盖 url 本身或硬编码表单名称是不够的。我希望有人能够帮助我解决这个问题。

【问题讨论】:

  • 您是否检查过WebChromeClientWebViewClient 的任何方法是否可以帮助您?
  • 我有。不幸的是,它们都不能返回请求的 POST 参数。
  • 困难的一个..也许使用可以拦截您的信息并将其返回给您的应用程序的外部脚本?
  • 我已经考虑过了,但不确定我应该如何实施它。

标签: android forms http post webview


【解决方案1】:

您可以使用 javascript 来拦截发布。由于您可以使用 javascript 验证所有输入,因此您还可以设置所有 key=value 对。 javascript 本身只能执行一个 get 请求。如果不允许这样做,请使用 android javascript 桥来执行帖子。

【讨论】:

    【解决方案2】:

    查看 webview 的 WebViewClient http://developer.android.com/reference/android/webkit/WebView.html#setWebViewClient(android.webkit.WebViewClient)。 使用它,您可以处理通过您的 webview 的所有请求。

    【讨论】:

    • 很遗憾,您无法使用 WebViewClient 拦截 POST 请求。甚至认为 WebViewCore 类包含 POST 参数我还没有找到访问它们的方法,因为 WebViewCore 是私有 API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多