关于Android的webview,用过的想必都不会陌生。这里我就不说webview的基本用法了,想要知道的可以去网上百多,有很多介绍webview基本用法的。
本文要介绍的主要是在项目过程中使用webview的postUrl遇到的坑。
1、使用场景如下:
webview在加载H5链接时,默认是使用loadUrl进行加载,如果你设置了缓存属性(进行缓存),在显示的H5页面内点击跳转到另外一个页面后,按回退键,可以正常的返回到上一个页面,因为进行了缓存设置。但是如果使用postUrl进行加载,即使你设置的缓存属性是进行设置,当你调转到另外一个页面后,按回退键,不会缓存之前的页面,而是重新调用postUrl进行加载。这时问题就来了,同样是进行加载,第一次的postUrl能够正常加载,重新加载会加载失败,没有内容显示。是不是很有意思,为什么会出现这样的情况呢,通过抓包发现,虽然加载的是同样一个链接,但是重新加载的请求属性为空,导致加载失败。
2、如何解决:
既然找到了原因,请求属性为空,肯定是有解决办法的,那就手动设置请求属性,重新加载。如何手动设置,首先你肯定是要能够拿到请求的所有内容和参数。用过webview的人相必都很熟悉它的setWebViewClient方法。该方法内部有shouldInterceptRequest方法能够拿到请求的所有内容。不多说了,先上代码。
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {