Android WebView shouldOverrideUrlLoading,我应该调用super方法还是只返回false

时间:2015-01-05 19:07:47

标签: javascript android

我的最低代码如下 用例是这样的:

  • 如果是第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;
      }
  }

}

1 个答案:

答案 0 :(得分:1)

shouldOverrideUrlLoading()的默认实现返回false。所以,截至目前,两者完全相同。就个人而言,我认为返回false会使程序员的意图更加清晰,但这是一种风格问题。

对此方法返回false意味着WebView本身将处理该URL。 documentation

清楚地表明了这一点
  

如果提供了WebViewClient,则返回true表示主机应用程序   处理url,而return false表示当前的WebView句柄   网址。