Android WebView:导航到Url哈希,无需使用goBackOrForward重新加载
我想在不重新加载网页的情况下导航单页应用程序。单击按钮,我调用以下代码进行导航Android WebView:导航到Url哈希,无需使用goBackOrForward重新加载,android,android-webview,Android,Android Webview,我想在不重新加载网页的情况下导航单页应用程序。单击按钮,我调用以下代码进行导航 String fullUrl = "https://example.com/page1"; String hashUrl = "/page1"; public void goBackInWebView(String fullUrl, String hashUrl) { WebBackForwardList history = webview.copyBackForwa
String fullUrl = "https://example.com/page1";
String hashUrl = "/page1";
public void goBackInWebView(String fullUrl, String hashUrl) {
WebBackForwardList history = webview.copyBackForwardList();
int index;
int currentIndex = history.getCurrentIndex();
for (int i = 0; i < history.getSize(); i++) {
index = i - currentIndex;
if ((webview.canGoBackOrForward(1 + i)) || (webview.canGoBackOrForward(1 - i))) {
if (history.getItemAtIndex(i).getUrl().endsWith(hashUrl)) {
webview.goBackOrForward(index);
break;
} else if (i == history.getSize()) {
webview.loadUrl(fullUrl);
break;
}
} else {
//OUTER ELSE
webview.loadUrl(fullUrl);
break;
}
}
}
String fullUrl=”https://example.com/page1";
字符串hashUrl=“/page1”;
public void goBackInWebView(字符串fullUrl、字符串hashUrl){
WebBackForwardList history=webview.copyBackForwardList();
整数指数;
int currentIndex=history.getCurrentIndex();
for(int i=0;i
如果网页未保存在历史记录中,它将调用webview.loadUrl(fullUrl)
否则它将使用webview.goBackOrForward(索引)加载页面代码>
但是每次外部调用时都在代码上方。首先,canGoBackOrForward用于获取页面是否可以返回或前进给定数量的步骤。正如您在问题中提到的,您的web页面是单页的,所以您不需要调用此方法。我认为下面的代码可以解决您的问题
public void goBackInWebView(String fullUrl, String hashUrl) {
WebBackForwardList history = webview.copyBackForwardList();
if (history.getSize() == 0) {
webview.loadUrl(fullUrl);
}else {
for (int i = 0; i < history.getSize(); i++) {
if (history.getItemAtIndex(i).getUrl().endsWith(hashUrl)) {
webview.goBackOrForward(i);
break;
} else {
webview.loadUrl(fullUrl);
}
}
}
}
public void goBackInWebView(字符串fullUrl,字符串hashUrl){
WebBackForwardList history=webview.copyBackForwardList();
if(history.getSize()==0){
loadUrl(fullUrl);
}否则{
for(int i=0;i
我发现很难看出Android和WebView有多大关系,因为问题是SPA
最好使用SPA导航,因为这不会请求服务器端的任何内容。
要点很简单,后退按钮一点也不重要,但永远不会导航。
您只需要绑定JavaScript,只要window.location.hash
发生更改,它就会运行。您需要做的是创建一个WebViewFragment,它接受您的前向url并打开(加载)它。每次有新的正向URL时,通过截取shouldOverrideUrl附加一个新的片段,并在后退时只需弹出片段。:)这样,您还可以将动画从一个页面修改到另一个页面。你会更好地掌握你的网页。