Я пытаюсь проанализировать каждое событие клика, перехватить 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 внедряются на стороне сервера.