Android,捕获webview重定向url

问题描述 投票:0回答:4

我的网络视图加载一个网址,在完成加载后,该网址将更改为另一个网址。 我怎样才能捕获新的网址。

getURL()
始终返回第一个 url,而不是第二个。 如果我使用浏览器,我可以看到新的 URL,但我无法从网络视图中获取。

android webview android-webview
4个回答
56
投票

您可以使用 webClient 并实现 shouldOverrideUrlLoading 来拦截所有 url 在 WebView 加载它们之前。

    mWebView.setWebViewClient(new WebViewClient() {


        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
           // Here put your code
              Log.d("My Webview", url);

           // return true; //Indicates WebView to NOT load the url;
              return false; //Allow WebView to load url
        }
    });

5
投票

使用

getOriginalUrl () 

它返回当前页面最初请求的 URL

getUrl ()
并不总是与传递给
WebViewClient.onPageStarted
的 URL 相同,因为尽管该 URL 的加载已开始,但当前页面可能尚未更改。

getOriginalUrl ()
获取当前页面的原始 URL。这并不总是与传递给
WebViewClient.onPageStarted
的 URL 相同,因为尽管该 URL 的加载已经开始,但当前页面可能尚未更改。此外,可能存在重定向,导致 URL 与最初请求的 URL 不同。


0
投票

在我的例子中,WebViewClient 没有显示 Web 视图上是否有更改,我认为这是有关正在运行的 Web 的信息。

我可以使用 OnProgressChanged 从 WebChromeClient 获取该信息,我不知道这是否会对人们有帮助,但这里是代码:

webview.webChromeClient = object : WebChromeClient(){

    override fun onProgressChanged(view: WebView?, newProgress: Int) {
        super.onProgressChanged(view, newProgress)

        if (newProgress == 100) {
            Log.d("testing", webview.getOriginalUrl())
            Log.d("testing", webview.url)
        }
    }
}

这样我就可以知道加载了什么以及何时完成。


0
投票

您必须通过 javascript 接口获取 onPageFinished 方法

webView.setWebViewClient(new WebViewClient() {
                    @Override
                    public void onPageFinished(WebView view, String url) {
                        webView.loadUrl("javascript:window.Android.onUrlChange(window.location.href);");

                        super.onPageFinished(view, url);
                    }
                });

public class WebAppInterface {
        Context mContext;

        WebAppInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void onUrlChange(String url) {
            Toast.makeText(getApplicationContext(), url, Toast.LENGTH_SHORT).show();
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.