Javascript Webview应覆盖未调用的URL加载

Javascript Webview应覆盖未调用的URL加载,javascript,android,android-webview,anchor,Javascript,Android,Android Webview,Anchor,我正在制作一个电子书阅读器,它使用epub格式将书籍加载到WebView中。 在一些书中,有一个锚链接到同一章的某些部分。每个章节都以html的形式加载。这就是链接的样子 file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink 我尝试使用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设备中,我正确地获得了锚链接,但在4.4或5.0中,它是关于:空白的。(在这两种情况下,
shouldOverrideUrlLoading
未被调用)

我不确定下面的方法是否能解决您的问题

请在设置
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); 
此外,我还启用了缩放控件。请注意,我已经用多个设备和品牌(HTC、三星、Nexus等)测试了从API-10开始的代码,发现
应该始终可以覆盖

如果工作不顺利,请尝试扩展WebViewClient并重写
shouldOverrideUrlLoading
方法

class MyWebView extends WebViewClient{
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return false; //THis should be false always
    }
}

现在将WebViewClient设置为
reader.setWebViewClient(新的MyWebView())

我没有以编程方式对此进行测试,但我相信您会面临这个问题,因为webview在OS4.4之后的工作方式发生了重大变化。你应该检查这个链接

在“自定义Url处理”部分下,它表示不会为无效Url调用shouldOverrideUrlLoading()。理想情况下,file://应该被视为有效的url,但这里似乎没有

一种可能的解决方案是使用loadDataWithBaseURL加载主webview内容
并提供baseurl作为一些测试url,例如,它将保证shouldOverrideUrlLoading将一直被调用。作为下一步,如果在shouldOverrideUrlLoading回调中收到的url中存在前缀“”,则需要删除该前缀。

是。安德罗吉克先生回答得很对。 在AndroidOS4.4(KK)中,如果您实现了诸如shouldOverrideUrlLoading()或shouldInterceptRequest()之类的回调,那么WebView仅对有效URL调用它们。
若您使用的是自定义URL并且在您的控制下,那个么您需要遵循RFC3986标准来调用上述方法。请检查RFC 3986相关文件://并更正您的URL

,在我的情况下,由于网页上的POST请求,它无法工作:

注意:POST请求不调用此方法

注意:此方法可针对子帧和非HTTP调用 计划;使用这样的URL调用WebView#loadUrl(String)将失败


重写
应改为InterceptRequest
(一个或两个版本)。另请参见。

您是否在日志cat中进行了检查。应该重写的加载没有被调用将其更改为<代码>返回true然后重试..单击锚链接不会导致任何加载。浏览器只需滚动内容即可显示链接目标。好的…请看如何操作。您是否在清单中设置了targetSdkVersion?您的目标是什么?编译sdkversion?我的目标版本是22,编译SDK版本是22。