标题形貌:我的h5链接中有#号,好比:url="home/#/?token=123"
就是由于这个#号导致页面革新不好用了。
办理方案(总体思绪):handler延长革新。
我用到的技能:
1.AgentWeb(对安卓的WebView做了一些封装,你也可以把它看成安卓的WebView。传送门)
2.handler和h5革新相干。
假如你用的是安卓的WebView,你看完办理方案(思绪)后,可以直接去看第6条。
下面是代码
1.全局变量
private Handler dataHandler;private AgentWeb mAgentWeb;private String url = "https://www.baidu.com/";2.在onCreate()方法中创建handler和AgentWeb;里面的binding.linWeb就是xml结构文件中的lin_web
//创建handlerdataHandler = new Handler(Looper.getMainLooper());mAgentWeb = AgentWeb.with(this) .setAgentWebParent(binding.linWeb, new LinearLayout.LayoutParams(-1, -1)) .closeIndicator()//利用默认进度条 .setWebViewClient(new WebViewClient()) .createAgentWeb() .ready() .go(url);3.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" androidrientation="vertical"> <LinearLayout android:id="@+id/lin_web" android:layout_width="match_parent" android:layout_height="match_parent" androidrientation="vertical" /></LinearLayout>4革新方法
/** * 革新页面 */ public void reloadPage() { if (mAgentWeb == null) return; //拿到这个页面,末了一次加载的url String lastLoadUrl = mAgentWeb.getWebCreator().getWebView().getUrl(); //克制前次革新 mAgentWeb.getUrlLoader().stopLoading(); AgentWebConfig.removeAllCookies(); AgentWebConfig.clearDiskCache(this.getContext()); mAgentWeb.getUrlLoader().loadUrl(url); if (dataHandler != null && lastLoadUrl != null && lastLoadUrl.equals(url)) { dataHandler.postDelayed(new Runnable() { @Override public void run() { mAgentWeb.getWebCreator().getWebView().reload(); } }, 150); }}5.假如你的革新尚有标题,那大概和h5的写法有关,用用下面这种革新方法,我们项目里h5我都是用了2种革新方法才办理,坑啊。
//革新页面 public void reloadPage() { if (mAgentWeb == null) return; //拿到这个页面,末了一次加载的url String lastLoadUrl = mAgentWeb.getWebCreator().getWebView().getUrl(); mAgentWeb.getUrlLoader().stopLoading(); AgentWebConfig.removeAllCookies(); AgentWebConfig.clearDiskCache(this.getContext()); if (handler != null) { if (lastLoadUrl != null && lastLoadUrl.equals(url)) { mAgentWeb.getWebCreator().getWebView().reload(); } else { mAgentWeb.getUrlLoader().loadUrl(url); handler.postDelayed(new Runnable() { @Override public void run() { mAgentWeb.getWebCreator().getWebView().reload(); } }, 150); } } }好了,上面就是AgentWeb的全部内容了,下面的和安卓自带的WebView相干。
6.安卓自带的(WebView)
起首阐明安卓自带的webview我没有实验,但是原理和思绪是一样的,实验的本钱也不大。下面的是伪代码:
public void reloadPage() { if (webview == null) return; //拿到这个页面,末了一次加载的url String lastLoadUrl = webview.getUrl();//TODO 留意假如你有缓存,留意这里要清一下缓存 webview.loadUrl(url); if (dataHandler != null && lastLoadUrl != null && lastLoadUrl.equals(url)) { dataHandler.postDelayed(new Runnable() { @Override public void run() { webview.reload(); } }, 150); }}//留意,大概是下面的革新方法,2选1即可//革新页面 public void reloadPage2() { if (webview == null) return; //拿到这个页面,末了一次加载的url String lastLoadUrl = webview.getUrl();//TODO 留意假如你有缓存,留意这里要清一下缓存 if (handler != null) { if (lastLoadUrl != null && lastLoadUrl.equals(url)) { webview.reload(); } else { webview.loadUrl(url); handler.postDelayed(new Runnable() { @Override public void run() { webview.reload(); } }, 150); } } }好了,假如对你有资助可以帮忙点一个小红心~ |