Webview shouldOverrideUrlLoading не получает вызов

Я делаю ebook reader, который использует epub формат для загрузки книг в webviews. В некоторых из книг есть привязка к некоторым частям в той же главе. Каждая глава загружается как html. Так выглядит ссылка

file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink 

Я попробовал использовать shouldOverrideUrlLoading() чтобы получить обратный вызов, но он не вызван и когда я onPageFinished ссылки в onPageFinished url показан как about:blank

 reader.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.w("TESTTESTOVERRIDE "+url); view.loadUrl(url); return false; } @Override public void onPageFinished(WebView view, String url) { // after the data has been loaded, the following is executed // TODO Auto-generated method stub super.onPageFinished(view, url); System.out.println("check.... onPageFinishedEntered.." + url.toString()); view.loadUrl(jsfileloadurl); } 

Есть идеи?

EDIT: В устройствах 4.1 я правильно привязываю ссылки, но в 4.4 или 5.0 это примерно: пустое. (В обоих случаях shouldOverrideUrlLoading не вызывается)

Solutions Collecting From Web of "Webview shouldOverrideUrlLoading не получает вызов"

Я не тестировал это программно, но я считаю, что вы столкнулись с этой проблемой, потому что произошли серьезные изменения в том, как веб-просмотр работает после OS 4.4. Вы должны проверить эту ссылку https://developer.android.com/guide/webapps/migrating.html#URLs

В разделе «Обработка пользовательских URL» указано, что shouldOverrideUrlLoading () не будет вызываться для недопустимого URL-адреса. В идеале файл: // должен рассматриваться как действительный url, но похоже, что здесь этого не происходит.

Одно из возможных решений – загрузить основной контент webview с помощью loadDataWithBaseURL и предоставить baseurl в качестве некоторого тестового URL, например http: //mytestap.testurl , это гарантирует, что mustOverrideUrlLoading будет вызываться все время. В качестве следующего шага вам нужно удалить префикс « http: //mytestap.testurl », если он существует в полученном URL-адресе в обратном вызове toOverrideUrlLoading.

Да. Г-н андрогеек ответил на это правильно. Из Android OS 4.4 (KK), если вы реализуете обратные вызовы, такие как shouldOverrideUrlLoading () или shouldInterceptRequest (), то WebView вызывает их только для действительных URL-адресов. Если вы используете настраиваемый URL-адрес и под вашим контролем, вам необходимо следовать стандарту RFC 3986 выше. Просьба проверить связанный файл RFC 3986: // и исправить URL-адрес

Я не уверен, разрешит ли ниже вашу проблему или нет.

Добавьте код ниже перед настройкой WebViewClient

 reader.getSettings().setLoadWithOverviewMode(true); reader.getSettings().setUseWideViewPort(true); /*This makes the layout/page rendering independent of the devices. I use this to display local HTML pages.*/ reader.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL); 

Кроме того, у меня включен контроль масштабирования. Обратите внимание, что я тестировал свой код с API-10 с помощью нескольких устройств и брендов (HTC, Samsung, Nexus и т. Д.) И обнаружил, что shouldOverrideUrlLoading работает все время.

Если что-то не работает, попробуйте расширить WebViewClient и переопределить метод shouldOverrideUrlLoading

 class MyWebView extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; //THis should be false always } } 

Теперь установите WebViewClient как reader.setWebViewClient(new MyWebView());