Webview shouldOverrideUrlLoading没有被调用

shi*_*eph 7 javascript anchor android android-webview

我正在制作一个电子书阅读器,它使用epub格式将书籍加载到webview中.在一些书籍中,有一个锚链接到同一章节的某些部分.每章都以html格式加载.这就是链接的样子

file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink
Run Code Online (Sandbox Code Playgroud)

我尝试使用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);




    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:在4.1设备中我正确获得锚链接,但在4.4或5.0中它是关于:空白.(在两种情况下shouldOverrideUrlLoading都没有被调用)

and*_*eek 10

我没有以编程方式对此进行测试,但我相信您正面临这个问题,因为在视图操作系统4.4之后webview的工作方式发生了重大变化.你应该看看这个链接 https://developer.android.com/guide/webapps/migrating.html#URLs

在"自定义网址处理"部分下,它表示不会为无效网址调用shouldOverrideUrlLoading().理想情况下,file://应该被视为有效网址,但似乎没有在这里发生.

一种可能的解决方案是使用loadDataWithBaseURL加载主webview内容并提供baseurl作为一些测试URL,例如http://mytestap.testurl,它将保证将始终调用shouldOverrideUrlLoading.如果存在于shouldOverrideUrlLoading回调中的接收URL中,则需要删除前缀' http://mytestap.testurl ' 作为下一步.


Dev*_*aja -3

我不确定下面的内容是否能解决您的问题。

请在设置之前添加以下代码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); 
Run Code Online (Sandbox Code Playgroud)

此外,我还启用了缩放控件。请注意,我已经使用多个设备和品牌(HTC、三星、Nexus 等)测试了从 API-10 开始的代码,发现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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在将 WebViewClient 设置为reader.setWebViewClient(new MyWebView());