如何从Android WebView中获取当前页面的URL

32
使用webview.loadUrl(url)方法打开一个URL。如果我点击视图上的任何Button,它将指向另一个页面。现在我想获取被指向页面的URL,怎么做?
我还想要显示在WebView中的内容。如何获取WebView的内容?

请看这个链接:https://dev59.com/vFgR5IYBdhLWcg3ww_s0#76416354 - Mori
请看这个链接:https://stackoverflow.com/a/76416354/12272687 - undefined
5个回答

49
String webUrl = webView.getUrl();

37

请看我的答案,希望它能帮到你...!!!!

WebView webview = new WebView(context);
webview.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

                Log.d("WebView", "your current url when webpage loading.." + url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                Log.d("WebView", "your current url when webpage loading.. finish" + url);
                super.onPageFinished(view, url);
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onLoadResource(view, url);
            }
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                System.out.println("when you click on any interlink on webview that time you got url :-" + url);
                return super.shouldOverrideUrlLoading(view, url);
            }
        });

我无法从任何重写的方法中获取任何消息。 - SweetWisher ツ
我也无法看到任何相关的信息。 - Laxmi kant

11

我假设您已经设置了WebViewClient,如果没有,则可以按如下方式执行:

webView.setWebViewClient(new MyWebViewClient());

String currentUrl;

private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {         
            currentUrl=url;
            return true;
        }
    }

当您在WebView上点击任何链接时,它将调用shouldOverrideUrlLoading()方法,您可以在其中获取当前url:currentUrl


请注意,currentUrl不会在返回时更新。替代方法是覆盖onPageStarted - AnT

2

处理API > 20的最简单方法是:每次WebView中的URL更改时,请求对象中的URL也会更改。当然,还有其他使用像HTMLCleaner这样的解析器来控制更多的方法。但是,这种方法获取URL非常好而且简单。

@Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String temp  = request.getUrl().toString();
            if(temp.isEmpty()){
                Log.i(ActivityName, "No url returned!");
            }else{
                Log.i(ActivityName, temp);
            }
            return  false;
        }

您还可以通过重写WebViewClient的onPageFinished方法来进行调用。我想要指出这一点,因为在页面加载完成时会被调用。


0
在Java中,可以这样写:
String js = "(function() { " +
        "return document.getElementById('my_element').innerHTML;" +
        "})()";

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        view.evaluateJavascript(js, new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                // 'value' contains the result of the JavaScript code
                Log.d("WebView", "Data: " + value);
            }
        });
    }
});

在Kotlin中:
    var js = "(function() { " +
                "return document.getElementById('my_element').innerHTML;" +
                "})()"
      webView.webViewClient = object : WebViewClient() {
           override fun onPageFinished(view: WebView, url: String) {
                    super.onPageFinished(view, url)
            view.evaluateJavascript(jso) { value -> 
// 'value' contains  the result of the JavaScript code

            Log.d("WebView", "Data: $value")
        }
        }
            }

注意:`getElementsByClassName`也可以获取值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接