首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓WebView :无需使用goBackOrForward重新加载即可导航至Url Hash

问安卓WebView :无需使用goBackOrForward重新加载即可导航至Url Hash
EN

Stack Overflow用户
提问于 2020-09-02 13:57:07
回答 2查看 172关注 0票数 2

我想在不重新加载网页的情况下浏览Angular单页应用程序。单击按钮时,我调用以下代码进行导航。

代码语言:javascript
复制
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);加载页面。

但每次外部调用时都在上面的代码上。

EN

回答 2

Stack Overflow用户

发布于 2020-09-13 20:32:37

首先,canGoBackOrForward用于获取页面是否可以按给定的步数后退或前进。正如你在问题中提到的,你的网页是单页面的,所以你不需要调用这个方法。我认为下面的代码可以解决你的问题。

代码语言:javascript
复制
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);
                }


            }
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2020-09-14 14:21:22

我发现很难看出安卓和WebView有多大关系,因为问题出在SPA上。

最好为SPA使用hashtag #导航,因为这不会在服务器端请求任何东西。

问题很简单,后退按钮无关紧要,而且从来没有导航过。

我们只需要绑定JavaScript,它会在window.location.hash发生变化时运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63699495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档