Слушатель ресурса Webview не перехватывает загруженные ресурсы - PullRequest
1 голос
/ 02 марта 2011

У меня есть веб-приложение, которое прослушивает щелчки и сравнивает их с предварительно определенными строками, чтобы проверить, нужно ли мне подключаться к Java.

Я начал с очевидного:

shouldOverrideUrlLoading

и там делайте что-то вроде:

if(url.contains(myhook)){
   //do what i need 
}

Это хорошо, когда дело касается кликов пользователей в веб-просмотре. Но теперь я нахожусь в точке, где мне нужно поймать, если ресурс загружает URL. Поэтому я нашел «onLoadResource» и решил, что это то, что я хочу, но я не могу заставить его работать.

Моя общая настройка:

private String myhook = "http://domain.com/listener";
{ ... }
@Override
public void onLoadResource(WebView view, String url)
    {
    if(url.contains(myhook)){

        //do my stuff!!

        mWebView.loadUrl("http://domain.com/success.html");
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

Мой веб-код (index.html):

{...}
<a href="http://domain.com/processing.php" >sign up</a>
{...}

Это вызывает мою страницу обработки php:

<?php
{...}
header('Location: http://domain.com/listener/?data=#data#');
?>

Но мой хук никогда не вызывается, так что success.html никогда не загружается, а мое "делай мои вещи" никогда не происходит. Он пытается отправить запрос на http://domain.com/listener/?data=#data#, который не существует (я просто использую это, чтобы получить #data #).

Следует отметить, что мой "onLoadResource" находится внутри моего private class TestWebViewClient extends WebViewClient { прямо перед моим @Override public boolean shouldOverrideUrlLoading - не уверен, правильно ли это.

Любая помощь или другие методы будут оценены.

1 Ответ

2 голосов
/ 02 марта 2011

onLoadResource() не сработает, и не сработает shouldOverrideUrlLoading() в этом случае, это немного разочаровывает, но я обнаружил, что в WebView все эти запросы на html-странице не запускаются (как Изображения, CSSи так далее).У вас есть два варианта:

  1. Вставить Javascript в тот HTML-код, который знает , как взаимодействовать с Android Java.http://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled(boolean)
  2. Предварительно обработайте свою html-страницу и замените все те части, которые запрашивают нужный вам ресурс, на то, что вам нужно.

Однажды я создал программу для чтения RSS, которая нуждается в кэшировании изображений.Я использую (2) подход и заменяю все img источники на локальный ресурс.Это работает, но довольно тяжелые работы, хотя.В то время я просто использовал Simple Regex для выполнения замены, но в качестве альтернативы вы можете использовать библиотеку, например HTMLTidy , чтобы помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...