Webview следуетOverrideUrlLoading не перехватывать запросы URL - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь проанализировать каждое событие клика, перехватить URL-адрес http, который пытается загрузить в веб-просмотр, и решить, должно ли оно отображаться в зависимости от набора логики в соответствии с тем, как анализируется URL-адрес.Я следовал советам по этим 3 ссылкам StackOverflow:

1) Перехватывать и переопределять HTTP-запросы от WebView

2) Веб-представление Android shouldOverrideUrlLoading ()Устаревший. (Альтернатива)

3) https://stackoverflow.com/a/32711309/2480714

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

Iсоздал свой пользовательский WebViewClient и сначала переопределил его с намерением остановить все загрузки без моего разрешения, но я столкнулся с проблемой; некоторые URL-адреса загружаются и обходят мои методы переопределения, а некоторые нет.Я понятия не имею, почему это происходит.

Вот мой класс WebviewClient:

public class CustomWebViewClient2 extends WebViewClient {

    public CustomWebViewClient2(){

    }

    @Override
    public void onPageFinished(WebView view, String url) {
        Log.d("log", "(CustomWebViewClient) onPageFinished, URL == " + url);
    }


    @SuppressLint("NewApi")
    @Nullable
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        Log.d("log", "shouldInterceptRequest hit");
        return null;
    }

    @Nullable
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        Log.d("log", "shouldInterceptRequest hit");
        return null;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        Log.d("log", "(CustomWebViewClient) shouldOverrideUrlLoading");
        return true;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d("log", "(CustomWebViewClient) shouldOverrideUrlLoading");
        return true;
    }


    @Override
    public void onLoadResource(WebView view, String url) {
        Log.d("log", "intercepting onLoadResource, url == " + url);
    }


    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.d("log", "onPageStarted url == " + url);
    }
}

Как видите, он переопределяет правильные методы и должен (в теории) никогда не загружайте URL, если я не передаю его в веб-браузер для загрузки, но, к сожалению, некоторые сайты загружаются, а другие нет.

Я также попытался отключить кэш согласно этому комментарию в одном из ответов:

"Слово ВНИМАНИЕ! Если вы перехватываете попытку браузера получить изображение (или, возможно, какой-либо ресурс), а затем вернуть значение null (то есть позволить веб-представлению продолжить получение изображения), любые будущие запросы к этому ресурсу могут просто идти в кэш и НЕ будут вызывать mustInterceptRequest (). Если вы хотите перехватить КАЖДЫЙ запрос изображения, вынужно отключить кеш или (что я сделал) вызвать WebView.clearCache (true) "

но безрезультатно.Почему некоторые URL-адреса загружаются и игнорируют переопределение, а другие нет?

Обновление 1 : Вот пример URL-адреса https://cookpad.com/us, который отражает проблему, на которую я ссылаюсь,Похоже, это связано с тем, что Turbolinks внедряются на стороне сервера.

...