Webview shouldOverrideUrlLoading nicht immer genannt
Mache ich einen ebook-reader verwendet das epub-format zu laden, Bücher in webviews.
In einigen der Bücher gibt es einen Anker-link auf einige Teile im gleichen Kapitel. Jedes Kapitel ist geladen, wie html. Dies ist, wie der link Aussehen
file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink
Versuchte ich mit shouldOverrideUrlLoading()
- Methode auf, um den Anruf zurück , aber es ist nicht immer genannt, und wenn ich drücken Sie die links in onPageFinished
url angezeigt wird, als 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);
}
Irgendwelche Ideen?
BEARBEITEN: 4.1 Geräte bekomme ich die Anker-links korrekt,aber in 4.4 oder 5.0 es ist about:blank. (in beiden Fällen shouldOverrideUrlLoading
ist nicht genannt)
- haben Sie überprüfen Sie im log-cat . dass shouldOverrideUrlLoading ist nicht immer genannt
- Nein..nichts auf melden
- ändern Sie es zu ...
return true;
und versuchen Sie es erneut.. - Klick auf Anker-links nicht zu einer Belastung. Der browser scrollt einfach den Inhalt zu zeigen das link-Ziel.
- ok...den wie es zu tun.
- Haben Sie targetSdkVersion in Ihrem manifest?
- ja...Sie ist 14 und 21 compilesdkversion
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich noch nicht getestet, programmatisch aber ich glaube, Sie stehen vor dieser Frage, weil es gab wichtige Veränderungen, wie webview funktioniert post OS 4.4 . Sie sollten überprüfen Sie diesen link
https://developer.android.com/guide/webapps/migrating.html#URLs
Unter Abschnitt "Benutzerdefinierte Url-Handhabung" er sagt, dass shouldOverrideUrlLoading() wird nicht aufgerufen werden, für ungültige url. Idealerweise file://sollte so behandelt werden, als gültige url, aber wie es scheint passiert hier nicht.
Eine mögliche Lösung ist, laden Sie die wichtigsten webview Inhalte mit loadDataWithBaseURL
und bieten baseurl als einige test-url z.B. http://mytestap.testurl garantiert shouldOverrideUrlLoading bekommen wird aufgerufen, alle Zeit. Als nächsten Schritt müssen Sie entfernen Präfix'http://mytestap.testurl', wenn vorhanden in die erhaltene url in shouldOverrideUrlLoading Rückruf.
Ja. Herr androgeek, antwortete er zu Recht.
Von Android OS 4.4(KK), wenn Sie implementieren Rückrufe wie shouldOverrideUrlLoading() oder shouldInterceptRequest(), dann WebView ruft Sie nur für gültige URLs.
Wenn Sie Benutzerdefinierte URL und unter Ihrer Kontrolle sind, dann müssen Sie Folgen RFC 3986 standard zu den oben genannten Methoden genannt. Bitte prüfen RFC 3986 Verwandte Datei://und korrigieren Sie Ihre URL -
Ich bin mir nicht sicher, ob die unten Ihr problem beheben kann oder nicht.
Bitte fügen Sie folgenden code vor der Einstellung der
WebViewClient
Darüber hinaus habe ich den zoom-Steuerelemente aktiviert sein. Bitte beachten Sie, dass ich habe getestet, mein code aus der API-10 weiter mit mehreren Geräten und Marken (HTC, Samsung, Nexus, etc.) und festgestellt, dass die
shouldOverrideUrlLoading
arbeitet die ganze Zeit.Wenn die Dinge nicht gut funktioniert, versuchen Sie die Erweiterung der WebViewClient und Überschreiben Sie die
shouldOverrideUrlLoading
MethodeNun den WebViewClient als
reader.setWebViewClient(new MyWebView());