我的最低代码如下 用例是这样的:
如果是第1页,则从方法获取POST数据并使用postUrl发送。
如果是第2页,则将url发送到ACTION_VIEW活动并让android处理它。
我对第3页感到好奇。在这种情况下,我希望在我的Webview中打开网址。
内部页面3存在HTML表单。因此,如果我使用loadUrl
加载它,POST数据就会丢失。我也无法使用postUrl
加载它,因为POST数据位于HTML页面内,我不想制作一个javascript hack来获取表单的POST数据。所以我想在我的WebView中打开第3页。我该怎么做呢?
我应该致电super.shouldOverrideUrlLoading(view, url)
还是return false
?
Documentation尚不清楚。在没有return false
的情况下拨打super.shouldOverrideUrlLoading
,Android会在网页浏览之外处理网址吗?
public class myWebViewClient extends WebViewClient {
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if ( url.startsWith("http://example.com/page1") ) {
String postData = getPOSTdata();
view.postUrl(url, EncodingUtils.getBytes(postData, "BASE64"));
return true;
}
if ( url.startsWith("http://example.com/page2") ) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
if ( url.startsWith("http://example.com/page3") ) {
//super.shouldOverrideUrlLoading(view, url);
//return false;
}
}
}
答案 0 :(得分:1)
shouldOverrideUrlLoading()
的默认实现返回false。所以,截至目前,两者完全相同。就个人而言,我认为返回false会使程序员的意图更加清晰,但这是一种风格问题。
对此方法返回false意味着WebView本身将处理该URL。 documentation:
清楚地表明了这一点如果提供了WebViewClient,则返回true表示主机应用程序 处理url,而return false表示当前的WebView句柄 网址。