首页 > 解决方案 > 不会在 shouldOverrideUrlLoading 中捕获重定向

问题描述

编辑:我发现该网站是一个单页网站,这可能是我没有发现 url 更改的原因,所以现在我的问题是:我可以知道单页网站上的 url 更改了吗?

我有一个加载网站的 webView。shouldOverrideUrlLoading 仅在页面第一次加载时调用一次,但在网页内重定向时不会调用。

这是我使用的 webClient 的代码:

private class WebViewClientServiceGuide extends MyWebViewClient {
private WebView wv;

public WebViewClientServiceGuide(WebView _wv) {
    wv = _wv;
    Log.d(TAG, "WebViewClientServiceGuide.ctor");
}

public void onLoadResource(WebView view, String url) {
    Log.d(TAG, "WebViewClientServiceGuide - onLoadResource: " + url);
    super.onLoadResource(view, url);
}

@Override
public void onPageFinished(WebView view, String url) {
    //Add history to history manager if needed
    Log.d(TAG, "WebViewClientServiceGuide - onPageFinished");
    super.onPageFinished(view,url);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Log.d(TAG, "WebViewClientServiceGuide - shouldOverrideUrlLoading(WebView view, WebResourceRequest request)");
    return super.shouldOverrideUrlLoading(view, request);
}

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Log.d(TAG, "WebViewClientServiceGuide - shouldOverrideUrlLoading");
    return false;
}
}

假设我访问了这些页面:page1、page2、page3,但在 shouldOverrideUrlLoading 上仅捕获 page1。但是当我检查 webView 的历史 (copyBackForwardList) 时,我看到了所有列表 (page1, page2, page3)。

为什么会发生?(我尝试使用其他网站并捕获所有页面 - 我知道网站开发人员应该修复它,但我想知道为什么历史堆栈与我在 shouldOverrideUrlLoading 上捕获的 url 不同)

谢谢

标签: androidwebview

解决方案


找到了解决方案:我覆盖了一个名为 doUpdateVisitedHistory 的 WebViewClient 方法,它获取一个 url,即使在单页网站上也是如此


推荐阅读