在恢复 webview 时恢复历史记录和当前页面

Posted

技术标签:

【中文标题】在恢复 webview 时恢复历史记录和当前页面【英文标题】:Restore history and current page on resuming webview 【发布时间】:2011-06-02 15:46:18 【问题描述】:

我有一个在其中导航的 web 视图。我已经实现了回退和前进。我的问题是,当我在访问另一个活动后返回 webview 时,历史记录会丢失,即 webview 从第一个 url 开始。

如何编写代码,以便在我在 webview 上调用完成以在返回 webview 时切换到另一个活动后,恢复 WebBackForwardList 并转到我离开 webview 时所在的页面?

我尝试使用 webview.save/restoreState(bundle) 覆盖 onSaveInstanceState 和 onRestoreInstanceState 但没有成功。

我已经通过在偏好设置中保存最后一个url实现了返回最后一页,但是一直无法恢复整个历史记录。

【问题讨论】:

【参考方案1】:

你在重用 webview 吗?

restore() 的 javadoc 说:

这个方法应该被调用到 恢复 WebView 的状态 在使用对象之前。如果是 在 WebView 有一个之后调用 建立状态的机会(加载页面, 创建后退/前进列表等) 可能会有不良副作用。

因此重新生成 webview 对象可能会有所帮助。

其他研究途径:

WebView.restore() 在不清除列表的情况下调用 list.addHistoryItem(item),因此如果您有一个正在重用的 webView,调用 webView.clearHistory( ) 首先在 restore() 之前。

这个SO answer表示有一条消息可以发送到历史列表来添加项目。

祝你好运,请回复你的进度。

--拉里

【讨论】:

我尝试使用还原,但没有运气。我认为这可能是因为我的程序逻辑中的错误。事实证明,我已经完全重写了我的程序的 UI。以前我选择使用 startactivityforresult 从我的选项菜单中启动 webview 活动。我在返回令牌结果之前完成了 webview。在完成之前,我将通过 webview.getURL() 将最后一个 url 保存到我的 sharedpreferences 并在重新启动活动时重新打开 url。此方法只会重新加载最后访问的页面,而不是整个历史记录。 在我的新设计中,我已经实现了tabview,因此能够通过切换选项卡来保留整个历史记录(只要用户不按返回按钮调用onDestroy)。出于我当前设计的目的,我不需要实现恢复历史解决方案。如果我需要,我会回到这个线程。感谢您的想法 larham1,我会将这个问题标记为已回答。 我认为链接的 SO 答案是指 ios WebView,而不是 android 的。

以上是关于在恢复 webview 时恢复历史记录和当前页面的主要内容,如果未能解决你的问题,请参考以下文章

微信记录怎么恢复?恢复已删除微信历史记录的4种方式

idea没有提交到本地就不能恢复历史记录吗

恢复谷歌浏览器历史记录

IE访问历史记录恢复工具pasco

Webview 有时只有在暂停和恢复后才会变为空白

应用关闭时Android WebView保存显示状态