shouldOverrideUrlLoading (...) не выполняется, если "window.location.href" изменен в обратном вызове тайм-аута - PullRequest
5 голосов
/ 08 марта 2011

У меня есть функция JavaScript 'gotoMainPage ()'

function gotoMainPage( ) {
    window.location.href = "main/main.do";
}


Теперь, shouldOverrideUrlLoading(..) WebViewClient вызывается, если gotoMainPage( ) выполняется в результате «прямого взаимодействия с пользователем»,например, пользователь нажимает на этот div:
<div.... onclick='gotoMainPage();'/>

Однако, если выполнение выполняется с помощью setTimeout( gotoMainPage, 100 ); или с помощью обратного вызова XMLHttpRequest, shouldOverrideUrlLoading(..) никогда не вызывается, а запрашиваемая страницазагружен в веб-просмотр.

Я упускаю очевидное объяснение или это ошибка?

Кто-нибудь?

Ответы [ 2 ]

6 голосов
/ 22 октября 2011

В моем случае, при использовании window.location = "http://xxx" на моей веб-странице, событие shouldOverrideUrlLoading () не инициируется.

Однако, если я использую собственную схему или протокол URL-адреса, например"androidurl: // ", shouldOverrideUrlLoading () запущен. Мой обходной путь должен был бы использовать собственный протокол и добавить следующий код в метод shouldOverrideUrlLoading ():

if (url.startsWith("androidurl://")) {
    url = url.replaceAll("androidurl://", "http://");
}

Это изменит пользовательский протокол обратно"http://" протокол, и вы можете обработать правильный URL-адрес оттуда.

Это работает для меня.

3 голосов
/ 27 мая 2011

Я тоже видел это, что, imho, явно ошибка.Возможно, вы можете зафиксировать:

@Override
public void onLoadResource (WebView view, String url)
{

}

и / или

@Override
public void onPageFinished(WebView webView, String url) 
{

}

Я сам попробовал это и обнаружил, что onLoadResource будет срабатывать, даже если shouldOverride не было.

...