在 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 中获取文档位置?的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio:地理定位不起作用。无法在 Webview 中获取地理位置
如何使用 flutter_webview 插件在 Flutter 中启用位置?