2015-01-05 4 views
1

최소 코드는 다음과 같습니다.
사용 사례는 다음과 같이이다 :Android WebView shouldOverrideUrlLoading, super 메소드를 호출하거나 false를 반환해야합니까?

  • 하면 1 페이지, 다음 방법에서 POST 데이터를 얻을 postUrl로 보낼 수 있습니다.

  • 페이지 2 인 경우 URL을 ACTION_VIEW 활동에 보내고 android가 처리하도록하십시오.

  • 3 페이지가 궁금합니다.이 경우 웹보기에서 URL을 열어주세요.

인사이드 페이지 3 HTML 폼이 있습니다. 따라서 loadUrl으로로드하면 POST 데이터가 손실됩니다. 또한 POST 데이터가 HTML 페이지 안에 있기 때문에 postUrl으로로드 할 수 없으며 폼의 POST 데이터를 얻기 위해 자바 스크립트 해킹을하고 싶지 않습니다. 그래서 WebView에서 3 페이지를 열었 으면합니다. 그것을 위해 무엇을해야합니까?

super.shouldOverrideUrlLoading(view, url) 또는 return false으로 전화해야합니까?

Documentation은 분명하지 않습니다. return falsesuper.shouldOverrideUrlLoading없이 호출하면 안드로이드가 webview 외부에서 URL을 처리하도록합니까?


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

거짓 shouldOverrideUrlLoading() 반환에 대한 기본 구현입니다. 그래서, 지금 당장은 둘 다 똑같습니다. 개인적으로 거짓을 반환하는 것은 프로그래머의 의도를 더 분명하게하지만 생각은 스타일의 문제입니다.

이 메서드를 false로 반환하면 WebView 자체에서 URL을 처리합니다. 그 정도는 documentation에 분명하다

WebViewClient가 제공되는 경우

는, true를 돌려 현재 웹보기가 URL을 처리하는 의미 false를 반환하는 동안 호스트 응용 프로그램 이 URL을 처리하는 것을 의미한다.

관련 문제