-1

Я использую стандартную реализацию WebView и переопределяя метод shouldOverrideUrlLoading для запроса запроса внешним доменам. Звонок захватывается во всех моих проверенных версиях (15-22); однако в 15-18 WebView переходит к запрошенному URL-адресу до того, как вызываетсяOverrideUrlLoading для выполнения запроса внешнего браузера.shouldOverrideUrlLoading загрузка внутри и снаружи версий SDK <18

Пример:

SDK> = 19

WebView -> Загрузка URL -> shouldOverrideUrlLoading (TRUE), -> URL-адрес загружается в внешнем браузере и состояние Webview в сохраняется.

SDK < = 18

WebView -> Load URL -> URL загружается в WebView -> shouldOverrideUrlLoading (TRUE) -> URL загружается в внешнем браузере и состояние Webview теряется.

WebView Override Код:

private void webViewClient() { 
    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.startsWith(BASE_URL)) { 
       return false; 
      } else { 
       Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(i); 
       return true; 
      } 
     } 
    }); 
} 

ответ

1

Одной из возможных причин:
Такое поведение имеет смысл, если URL загружаемый "недействителен" (как нечто иное, чем "http://whatever.com/"), и это как-то и «перенаправление».

Если недействительный URL-адрес загружается, это «перенаправление» ...> = 19 вообще не будет вызывать shouldOverrideUrlLoading.

Если конечный URL-адрес действителен и не запускается с BASE_URL, он вызывает callOverrideUrlLoading, а затем запускает новое окно, как говорит ваш код.

Сказанное, я понятия не имею, как вы получите неверный URL-адрес для перенаправления, поэтому без дополнительной информации об URL-адресах (BASE_URL и запрашиваемом URL-адресе) невозможно сказать.

Подробнее о различиях между WebView в 19 + ... большие изменения были сделаны в то время:

https://developer.android.com/guide/webapps/migrating.html