shouldOverrideUrlLoading

shouldOverrideUrlLoading

我正在制作一个使用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”,则需要删除该前缀。

09-05 08:24