10

我希望我的 Android 应用程序使用 Webview 来显示 html 表单。当用户按下提交按钮时,它希望将名称/值对发送回我的程序。我该怎么做呢?

我看过其他类似的问题,但没有回答具体说明如何做到这一点。

4

3 回答 3

1

研究 WebView 中 Javascript 接口的使用。请参阅Android 开发者指南的这个区域。基本上,您应该能够使用 Javascript 接口从页面与设备进行通信,并让您的 WebView Activity 知道何时按下提交按钮并发送其值。

于 2012-06-01T16:13:22.193 回答
1

我找到了我需要的东西。如果我在 html 表单中设置 action='FORM" ,那么我可以通过以下方式拦截操作:

        public void onLoadResource (WebView view, String url){
        int index = url.indexOf("FORM?");
        if (index != -1){
            String d = URLDecoder.decode(url.substring(index+5));
        }
    }

名称/值对在字符串 d 中。

于 2012-06-03T03:17:10.627 回答
0

如果您想保存名称/值对并愿意使用 jQuery,那么这很简单。假设您将 jQuery 放在您的资产文件夹中,您可以将其读入以下文件:

getResources().getAssets()

在您设置的 WebViewClient 中(假设您覆盖了客户端),您可以执行以下操作:

view.loadUrl("javascript:" + escapedJqueryStringHere);

然后,确保您使用为“MyJInterface”配置的方法(例如,名为“ReturnJSONFromForm(String json)”)为 webview 配置了 JavascriptInterface,然后将表单加载到页面中,然后尝试以下操作:

webview.loadUrl("javascript:MyJInterface.ReturnJSONFromForm($(\"form\").serialize());");

现在在您的界面中,只需从结果字符串创建一个 JSONObject 即可!表单中的名称/值对。

序列化不会捕获禁用的字段或提交按钮.. 如果您需要,那么存在更复杂的 javascript 解决方案,但要困难得多。

于 2013-07-12T17:37:12.933 回答