我想在不重新加载网页的情况下浏览Angular单页应用程序。单击按钮时,我调用以下代码进行导航。
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;
}
}
}如果网页没有保存在历史记录中,它将调用webview.loadUrl(fullUrl);,否则将使用webview.goBackOrForward(index);加载页面。
但每次外部调用时都在上面的代码上。
发布于 2020-09-13 20:32:37
首先,canGoBackOrForward用于获取页面是否可以按给定的步数后退或前进。正如你在问题中提到的,你的网页是单页面的,所以你不需要调用这个方法。我认为下面的代码可以解决你的问题。
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);
}
}
}
}发布于 2020-09-14 14:21:22
我发现很难看出安卓和WebView有多大关系,因为问题出在SPA上。
最好为SPA使用hashtag #导航,因为这不会在服务器端请求任何东西。
问题很简单,后退按钮无关紧要,而且从来没有导航过。
我们只需要绑定JavaScript,它会在window.location.hash发生变化时运行。
https://stackoverflow.com/questions/63699495
复制相似问题