这个需求是需要记录当前网页滚动的位置,下次进来后仍然从这个位置开始。
实现这个需求有两种方法。
1)滚动webView,因为webView继承自view。所以只需要调用scrollTo方法来滚动即可(实测并不好用,会导致webview一部分显示不出来)
2)可以通过js和webview来回调。并通过持久化存储来记录对应webview的滑动尺寸。从而来解决这个问题。
html中只需要定义以下两个js方法。
// 获取滚动屏幕的高度
function getScrollWindow()
{
var heightTop=0;
if (document.documentElement && document.documentElement.scrollTop) {
heightTop = document.documentElement.scrollTop;
} else if (document.body) {
heightTop = document.body.scrollTop;
}
window.js.getScrollWindow(heightTop)
}
// 滚动位置
function scrollWindow(scroll)
{
window.scrollTo(0,scroll)
}
这两个方法为操作网页滚动的方法
app中需要创建表来做持久化存储。
使用的sql为:"CREATE TABLE IF NOT EXISTS h5 (_id INTEGER primary key autoincrement, key TEXT, value TEXT,uid TEXT)";
并实现增删改查的方法。其中key为唯一标识,这里可以使用网页的地址做唯一标识。value是存储的位置,uid为具体的用户(可能存在多个用户登陆,这里分开标记)
原生中需要实现以下方法:
需要注意的是网页加载成功后,才能执行以下方法,这里可以放在webview的onPageFinished的回调中做以下处理
// 加载网页的最后滚动记忆点
private void loadLastPotion() {
loadUrl("javascript:scrollWindow('" + DLPaperView.this.mPosition +"')");
}
//当页面退出的时候进行保存即可
@JavascriptInterface
public void getScrollWindow(String position) {
// 进行持久化存储
}