在WebView中获取文档位置?

时间:2009-07-06 09:54:48

标签: android webview

简单来说:我想给当前位置添加书签(可能是 在WebView中显示的html文件中的几个位置 恢复它。任何一点提示都会有所帮助。 :)

2 个答案:

答案 0 :(得分:6)

如果“当前位置”是指给定页面中的某个点,我不相信这是可能的......至少不是纯粹来自Java。暴露给Java的整个WebKit API缺少处理页面内容的任何内容。

如果您可以控制页面内容,并且有办法通过页内Javascript了解这些位置,您可以:

步骤1:使用WebView#addJavascriptInterface()添加具有某种recordPosition()方法的对象,并在适当的地方保存信息

步骤2:创建一个Javascript函数,在注入的对象上调用recordPosition()

然后是:

步骤#3a:从Javascript本身触发Javascript功能(例如,基于点击),或

步骤#3b:在loadUrl("javascript:...");上调用WebView,其中...被Javascript代码替换,以触发步骤#2中的Javascript功能。

恢复这些位置必须以同样的方式工作:让Javascript进行实际的恢复,可能由Java代码触发。

请注意,我不知道您是否可以从Javascript中获取所需内容(获取/设置当前位置),因为我不是一个浏览器内编码器。

答案 1 :(得分:6)

我采取的方法如下:

onSaveInstanceState()方法中,计算用户滚动页面的距离。

    int contentHeight = webView.getContentHeight();
    int scrollY = webView.getScrollY();

    float scrollPercent = ((float) scrollY / ((float) contentHeight));

藏在捆绑中。在onCreate()方法中恢复页面时,等待页面完成加载(在WebClient.onPageFinished()中),滚动到记录的位置:

    int contentHeight = webView.getContentHeight(); 
    int y = (int) ((float) contentHeight * scrollPercent);
    webView.scrollTo(0, y);
  • 使用float并计算比例适用于在横向和纵向之间翻转的情况。
  • 与自动调整图片混合时,可以足够好完全
  • 也可以考虑比例。在开始加载页面之前,我倾向于使用onPause()方法在首选项中存储比例,然后webView.setInitialScale(scale)
  • 我发现当scrollPercent > 0看起来更好时,将网页视图设置为隐藏。