man*_*sha 28 forms post android webviewclient
我有这样的WebViewClient依恋WebView:
webView.setWebViewClient(new MyWebViewClient());
Run Code Online (Sandbox Code Playgroud)
这是我的实现MyWebViewClient:
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我给了WebView一个URL来加载via loadUrl().如果我a href...在页面中有一个link(),我的shouldOverrideUrlLoading方法被调用,我可以拦截链接点击.
但是,如果我有一个方法的表单,则不调用POST该shouldOverrideUrlLoading方法.
我在这里注意到了一个类似的问题:http://code.google.com/p/android/issues/detail?id = 9122这似乎建议覆盖postUrl我的WebView.但是,此API仅从API级别5开始提供.
如果我在API级别4,我该怎么办?有没有其他方法来拦截表格帖子?
你真的需要使用POST吗?如果您想在本地处理表单数据,为什么不让一段 javascript 使用 addJavascriptInterface 来处理您的表单和带有“本机”java 代码的界面。例如
WebView engine = (WebView) findViewById(R.id.web_engine);
engine.getSettings().setJavaScriptEnabled(true);
engine.addJavascriptInterface(new MyBridge(this), "bridge");
engine.loadUrl(...)
Run Code Online (Sandbox Code Playgroud)
您的网桥基本上可以是任何类,您应该能够直接从 javascript 访问其方法。例如
public class MyBridge {
public MyBridge(Context context) {
// ...
}
public String doIt(String a, String b) {
JSONArray result = new JSONArray();
result.put("Hello " + a);
result.put("Hello " + b);
return result.toString();
}
Run Code Online (Sandbox Code Playgroud)
您的 html/javascript 可能如下所示:
<script type="text/javascript">
$("#button").click(function() {
var a = $("#a").val();
var b = $("#b").val();
var result=JSON.parse(bridge.doIt(a, b));
// ...
}
</script>
<input id="a"><input id="b"><button id="button">click</button>
Run Code Online (Sandbox Code Playgroud)
这是已知问题,shouldOverrideUrlLoading无法捕获 POST。有关详细信息,请参阅http://code.google.com/p/android/issues/detail?id=9122。
使用获取!我个人尝试过使用 POST,因为我预计 GET 参数(即 URL 的长度)会受到一些限制,但我刚刚在本地成功通过 GET 传递了 32000 字节,没有任何问题。
| 归档时间: |
|
| 查看次数: |
28523 次 |
| 最近记录: |