Javascript Webview应覆盖未调用的URL加载
我正在制作一个电子书阅读器,它使用epub格式将书籍加载到WebView中。 在一些书中,有一个锚链接到同一章的某些部分。每个章节都以html的形式加载。这就是链接的样子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()方法
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。