抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

关于 腾讯X5 浏览器内核/ WebView 清除历史记录无效的问题

由于一些特殊原因,需要 WebView 的单例,目的主要是为了在应用使用中保留H5的登录信息,避免重复登录,而退出应用为了安全性考虑需要销毁登录信息,最简单的不需要与三方联调的办法就是不销毁 WebView,我们也不需要保存任何信息。

不销毁的做法很简单,就是将销毁的触发时机隔断,WebActivity 使用 SingleTask,销毁时使用 moveTaskToBack(true),在 onNewIntent 对每次请求的链接进行判断域名重复性,不同则重新加载页面。

主要问题在于加载新页面 B 后,点击后退会变成上一个页面 A,理论上只需要清除历史记录即可,但经过测试在 webView.loadUrl 前调用 webView.clearHistory 是无效的,需要将 clearHistory 保存起来,在 onPageFinished 页面加载完成后,进行 clearHistory 任务的执行。

private Stack<Runnable> stack = new Stack<>();

@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        moveTaskToBack(true);
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    stack.push(() -> webView.clearHistory());
    webView.loadUrl(mPageUrl);
}

class X5WebViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        if (!stack.isEmpty()) {
            stack.pop().run();
        }
    }

}

主要代码如上,没用 kotlin 是因为都是老代码,至于还有其他什么问题,等经过更多测试后补充。


本站由以下主机服务商提供服务支持:

0条评论

发表评论