2013-07-29 3 views
1

Кажется, что ошибка в WebViewClient в пряниках, мы полагаемся на метод boolean shouldOverrideUrlLoading (представление WebView, String url), чтобы вернуть заголовки в перенаправления и перезагрузки.WebViewClient in android 2.2 shouldOverrideUrlLoading not called

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.startsWith(URL.BASE_URL)) { 
     view.loadUrl(url, RestClient.defaultHeaders); 
    }else { 
     onExternalBrowserURL(url); 
    } 
    return true; 
} 

В 2.2 shouldOverrideUrlLoading не всегда называют, мобильный веб-сайт, а не андроид загрузки сайта.

Существует ошибка, перечисленные здесь http://code.google.com/p/android/issues/detail?id=15612 Смотрите здесь 2013 год Последний комментарий :(http://code.google.com/p/android/issues/detail?id=2887

ли кто-нибудь есть решение, которое не предполагает изменение всех из URL, в схему пользовательского URL-адрес или протокол?

Благодаря

+0

похоже: http://stackoverflow.com/questions/13096103/android-overriding-shouldoverrideurlloading-not-working-on-htc-devices – trante

ответ

1

shouldOverrideUrlLoading только называется (taken from the API guide)

, когда новый URL собирается быть загружен в текущем WebView

Это означает, что если вы загружаете http://www.google.com в вашу WebView, а затем загрузить его снова, второй раз shouldOverrideUrlLoading не будет срабатывать. Это раздражает, потому что нет возможности добавлять пользовательские заголовки к каждому запросу, не загружая веб-страницу самостоятельно, используя что-то вроде HttpRequest.

Я считаю, что они сконструировали shouldOverrideUrlLoading в первую очередь, чтобы пользователи WebView могли перехватывать первый запрос на сайт, такой как youtube, а затем направлять пользователя в приложение вместо использования браузера. Они не проектировали его, чтобы использовать для добавления заголовков печально.

Я некоторое время экспериментировал с его использованием, чтобы добавить заголовок DO NOT TRACK к моим запросам и, кроме того, не отправляя заголовок каждый раз по причинам, указанным выше, метод loadUrl (url, header) не помещал заголовок в правильное место и сайты не распознавали заголовок DNT.

tldr: Нет

1

shouldOverrideUrlLoading не вызывается при загрузке URL как

loadUrl("http://google.com"); 

или если браузер перенаправляет URL, как вы упомянули. Перенаправление не работает на уровне API 11 и ниже в соответствии с this page, но shouldOverrideUrlLoading не называется все версии, если вы хотите, чтобы получить URL, который вы использовали в loadUrl

Вы можете использовать onPageStarted вместо этого.

Смежные вопросы