2017-01-01 2 views
0

У меня есть WebView в приложении, которое загружает определенный URL-адрес, однако возможно, что при использовании приложения пользователь может быть отображен/перенаправлен в веб-виде на другой URL-адрес, например, на www. cheese.com, которые не должны рассматриваться в приложении. Возможно ли прослушать этот URL (www.cheese.com) в пределах WebView, и если он начнет загружать перенаправление на другой URL-адрес до того, как он закончит загрузку?Переадресовать конкретный URL-адрес в Webview - Android

public class MainActivity extends AppCompatActivity { 

    private WebView mWebView; 

     mWebView.loadUrl("https://example.com"); 

     // Enable Javascript 
     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

    } 
} 
+0

Вы пытаетесь сказать, что если URL начинаются с (www.cheese.com), то он будет перенаправлять на другой адрес? –

+0

Да, абсолютно – user1419810

+0

Тогда вы должны использовать метод 'shouldOverrideUrlLoading (WebView view, String url)' в этом методе, который вы можете сделать это. –

ответ

0

Попробуйте использовать что-то вроде этого:

webView.setWebViewClient(new WebViewClient() { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      if (url != null && url.startsWith("http://www.cheese.com")) { 
       //do what you want here 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 
1
// Load CustomWebviewClient in webview and override shouldOverrideUrlLoading method 
    mWebView.setWebViewClient(CustomWebViewClient) 



class CustomWebViewClient extends WebViewClient { 

    @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); 
    } 

    private boolean handleUri(final Uri uri) { 
     Log.i(TAG, "Uri =" + uri); 
     final String host = uri.getHost(); 
     final String scheme = uri.getScheme(); 
     // Based on some condition you need to determine if you are going to load the url 
     // in your web view itself or in a browser. 
     // You can use `host` or `scheme` or any part of the `uri` to decide. 

     /* here you can check for that condition for www.cheese.com */ 
     if (/* any condition */) { 
      // Returning false means that you are going to load this url in the webView itself 
      return false; 
     } else { 
      // Returning true means that you need to handle what to do with the url 
      // e.g. open web page in a Browser 
      final Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
      startActivity(intent); 
      return true; 
     } 
    } 
} 
Смежные вопросы