我正在制作一个使用epub格式的电子书阅读器,以将书加载到webview中。
在一些书中,有一个链接指向同一章中的某些部分。每章均以html格式加载。这是链接的样子
file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink
我尝试使用
shouldOverrideUrlLoading()
方法获取回叫,但没有得到调用,当我按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);
}
有任何想法吗?
编辑:在4.1设备中,我正确地获得了 anchor 链接,但是在4.4或5.0中,它是about:blank。 (在两种情况下均未调用
shouldOverrideUrlLoading
) 最佳答案
我尚未通过编程方式对此进行测试,但我相信您会遇到此问题,因为在OS 4.4之后,webview的工作方式发生了重大变化。您应该检查此链接
https://developer.android.com/guide/webapps/migrating.html#URLs
在“自定义网址处理”部分下,它表示不会为无效的网址调用shouldOverrideUrlLoading()。理想情况下,应该将file://视为有效的url,但似乎这里没有发生。
一种可能的解决方案是使用loadDataWithBaseURL加载您的主要Webview内容
并提供baseurl作为测试网址,例如http://mytestap.testurl,它将确保shouldOverrideUrlLoading始终被调用。下一步,如果在shouldOverrideUrlLoading回调中接收的URL中存在前缀“http://mytestap.testurl”,则需要删除该前缀。