在 WebView 中获取文档位置?

Posted

技术标签:

【中文标题】在 WebView 中获取文档位置?【英文标题】:Getting document position in a WebView? 【发布时间】:2010-11-08 08:20:51 【问题描述】:

简单来说:我想给当前位置添加书签(大概 几个位置)在一个 html 文件中显示在一个 WebView 到稍后 恢复它。任何小提示都会有所帮助。 :)

【问题讨论】:

【参考方案1】:

如果“当前位置”是指给定页面中的某个点,我认为这是不可能的……至少不是纯粹来自 Java。暴露给 Java 的整个 WebKit API 缺少很多处理页面内容的东西。

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

第 1 步:使用 WebView#addJavascriptInterface() 使用某种 recordPosition() 方法添加对象,将信息保存在适当的位置

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

然后:

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

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

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

请注意,我不知道你想要什么(获取/设置当前位置)是否可以从 Javascript 中获得,因为我不是浏览器内编码器。

【讨论】:

惊人的答案!非常感谢。相关问题:***.com/questions/1091048/…【参考方案2】:

我采取的方法如下:

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 时将 Web 视图设置为不可见看起来更好。

【讨论】:

效果很好。我确认应该考虑规模。谢谢。 @jamesh 什么是滚动比率? @135 好地方! — 我将其更改为 scrollPercent。

以上是关于在 WebView 中获取文档位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS webview 中获取当前屏幕上的显示文本

Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置

如何使用 flutter_webview 插件在 Flutter 中启用位置?

WebView 控件怎么设置显示位置和大小

如何从android中的webview获取所选部分的开始和结束位置

如何将android webview保持在后台(使用位置)