Webview shouldOverrideUrlLoading没有被调用

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

file:///storage/sdcard0/Android/data/com.abc.reader/files/Download/498935/epub/resources/498935/OEBPS/#footnote-165093-1-backlink 

我尝试使用shouldOverrideUrlLoading()方法来获取callback,但它没有得到调用,当我按onPageFinished链接显示为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不会调用shouldOverrideUrlLoading

Solutions Collecting From Web of "Webview shouldOverrideUrlLoading没有被调用"

我没有testing过这个程序,但我相信你正面临着这个问题,因为webview在OS 4.4后的工作方式发生了很大的变化。 你应该检查这个链接https://developer.android.com/guide/webapps/migrating.html#URLs

在“自定义Url处理”一节中,它说,shouldOverrideUrlLoading()不会被无效的URL调用。 理想情况下,文件:/ /应被视为有效的url,但似乎没有发生在这里。

一个可能的解决scheme是使用loadDataWithBaseURL加载主要的webview内容,并提供baseurl作为一些testingurl,例如http://mytestap.testurl ,它将保证shouldOverrideUrlLoading将被全部调用。 下一步,您需要删除前缀“ http://mytestap.testurl ”(如果存在于shouldOverrideUrlLoadingcallback中的收到的url中)。

是。 安德鲁杰克先生正确地回答了。 从Android OS 4.4(KK)开始,如果您实现了诸如shouldOverrideUrlLoading()或shouldInterceptRequest()之类的callback,那么WebView将仅为有效的URL调用它们。 如果您正在使用自定义url并且在您的控制之下,那么您需要按照RFC 3986标准对上述方法进行调用。 请检查RFC 3986相关文件://并更正您的URL

我不确定下面是否会解决您的问题。

在设置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,Samsung,Nexus等)从API-10开始testing了我的代码,发现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 } } 

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