webview记录历史滚动位置

1,150 阅读1分钟

这个需求是需要记录当前网页滚动的位置,下次进来后仍然从这个位置开始。

实现这个需求有两种方法。

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) {

// 进行持久化存储

}