Je fais un lecteur ebook qui utilise le format epub pour charger des livres dans les sites Web. Dans certains livres, il y a un lien d'ancrage à certaines parties dans le même chapitre. Chaque chapitre est chargé en tant que html. C'est comme ça que le lien ressemble
file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink
J'ai essayé d'utiliser la méthode shouldOverrideUrlLoading()
pour récupérer l'appel, mais il ne se fait pas appeler et lorsque j'appuie sur les liens dans onPageFinished
l'URL s'affiche à 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); }
Des idées?
EDIT: Dans les appareils 4.1, j'obtiens les liens d'ancrage correctement, mais en 4.4 ou 5.0, il s'agit: blanc. (Dans les deux cas, shouldOverrideUrlLoading
n'est pas appelé)
Je n'ai pas testé cela par programme, mais je crois que vous êtes confronté à cette question car il y a eu des changements majeurs dans la façon dont le Webview fonctionne après l'OS 4.4. Vous devez vérifier ce lien https://developer.android.com/guide/webapps/migrating.html#URLs
Dans la section 'Gestion des url personnalisée', il dit que shouldOverrideUrlLoading () ne sera pas invoqué pour une URL non valide. Idéalement, le fichier: // doit être considéré comme une URL valide, mais il semble que cela n'arrive pas ici.
Une solution possible est de charger votre contenu de visionnement principal avec loadDataWithBaseURL et de fournir baseurl comme url de test, par exemple http: //mytestap.testurl , il garantira que ShouldOverrideUrlLoading sera invoqué en permanence. À l'étape suivante, vous devez supprimer le préfixe ' http: //mytestap.testurl ' s'il existe dans l'URL reçue dans shouldOverrideUrlLoading callback.
Oui. M. Androgeek l'a bien répondu. À partir d'Android OS 4.4 (KK), si vous implétez des rappels tels que shouldOverrideUrlLoading () ou shouldInterceptRequest (), alors WebView les invoque uniquement pour les URL valides. Si vous utilisez l'URL personnalisée et sous votre contrôle, vous devez suivre la norme RFC 3986 sur les méthodes ci-dessus appelées. Veuillez vérifier le fichier connexe RFC 3986: // et corriger votre URL
Je ne suis pas sûr de savoir si ce qui suit résoudra votre problème ou non.
Ajoutez le code ci-dessous avant de définir 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);
En outre, j'ai activé les commandes de zoom. Notez que j'ai testé mon code à partir de API-10 avec plusieurs périphériques et marques (HTC, Samsung, Nexus, etc.) et shouldOverrideUrlLoading
constaté que shouldOverrideUrlLoading
fonctionne tout le temps.
Si les choses ne fonctionnent pas bien, essayez d'étendre le WebViewClient et remplacer la méthode shouldOverrideUrlLoading
class MyWebView extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; //THis should be false always } }
Définissez maintenant WebViewClient comme reader.setWebViewClient(new MyWebView());