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());
| 归档时间: |
|
| 查看次数: |
13076 次 |
| 最近记录: |