2017-02-09 17 views
2

내가 여기에서 찾은 모든 관련 게시물을 검토했지만 여전히 작동하지 못합니다. 리디렉션 (때때로 많은 리디렉션)이있는 URL로 WebView를 열고 있는데, 실제로로드가 완료되면 (URL 리디렉션이 더 이상 끝나지 않아 완료 됨) 알고 싶습니다.WebView에서 리디렉션이 완료되면 감지하는 방법은 무엇입니까?

의견이 있으십니까?

내가 읽은 모든 게시물은 shouldOverrideUrlLoading을 무시하지만 shouldOverrideUrlLoading을 호출해도 아무런 문제가 없습니다.

내 코드 :

mWebView = (WebView) findViewById(R.id.webview); 
WebSettings settings = mWebView.getSettings(); 
settings.setLoadWithOverviewMode(true); 
settings.setJavaScriptEnabled(true); 
settings.setLoadsImagesAutomatically(true); 
mWebView.setVerticalScrollBarEnabled(false); 
mWebView.setHorizontalScrollBarEnabled(false); 
mWebView.setWebViewClient(new MyWebViewClient()); 
mUrl = "http://cdn.something.com/something.html"; 
// mUrl = "https://www.google.com"; 
mWebView.loadUrl(mUrl); 



public class MyWebViewClient extends WebViewClient { 

    public MyWebViewClient() {} 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     Log.d(TAG, "WebViewClient: shouldOverrideUrlLoading"); 
     return false; 
    } 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     Log.d(TAG, "WebViewClient: onPageStarted: url: " + url); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     Log.d(TAG, "WebViewClient: onPageFinished: url: " + url); 
     super.onPageFinished(view, url); 
    } 

} 

당신이 그것을 작동하게하는 두 가지 방법을 모두 오버라이드 (override) 할 필요가 당신에게 당신이 android N에 추가 된 새로운 shouldOverrideUrlLoading 방법을 재정의

+0

onLoadResource 메소드를 사용해 보셨습니까? –

+0

확인 [this] (http://stackoverflow.com/questions/2659000/java-how-to-find-the-redirected-url-of-a-url) 대답 .. 당신은 URL 리디렉션이 완료되었는지 확인해야합니다. 아니면 'WebViewClient'의'onPageStarted' 메소드에 ... – ELITE

+0

@ 555 ** 절대 소스 코드를 편집하지 마세요. "URL"은 ** 대문자로 작성되어야합니다 ** 프로그램을 중단합니다 **. 특히 프로그래밍 언어가 완벽하지 않은 경우 편집을 통해 질문을 더 이상 만들지 마십시오. * 당신은이 지역 사회에 활발히 해를 끼치고 있습니다 *. –

답변

1

,

감사 (이전 더 이상 사용되지 않으며 새로운 것임)

@SuppressWarnings("deprecation") 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    final Uri uri = Uri.parse(url); 
    return handleUri(uri); 
} 

@TargetApi(Build.VERSION_CODES.N) 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
    final Uri uri = request.getUrl(); 
    return handleUri(uri); 
} 

this을, 을, 페이지로드가 완료되면 onPageFinished을 호출합니다.

+0

고마워, 이건 shouldOverrideUrlLoading to fire 야, 이제는 내가 찾은 제안을 구현하려고 노력할 것이다. onPageFinished는 여러 번 호출됩니다. 내 문제는 이것이 마지막으로 호출 된 것이 분명합니다. –

+0

또한 리디렉션을 webview 내에서 처리하여 handleUri 메서드가 나에게 도움이되지 않도록하고 싶습니다. –