检查webview android中的url更改不起作用

时间:2018-08-21 20:32:11

标签: java android url webview

如何检查将网址更改为WebView

@Deprecated
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
    String url = view.getUrl();
    return true;    
}

此功能仅在第一次更改时起作用

1 个答案:

答案 0 :(得分:1)

不知道为什么要添加@Deprecated批注,但是据我所知,旧的shouldOverrideUrlLoading方法确实是deprecated in API level 24.

因此,如果您的minSdkVersion为24或更高,则只能使用public boolean shouldOverrideUrlLoading(WebView, WebResourceRequest),但是使用shouldOverrideUrlLoading()(就像您的代码一样)只能抓住上一个 URL(如果URL更改)。如果您想在更改网址后获取当前网址,可以使用@JavascriptInterface

首先,您应该创建一个自定义WebViewClient

public class MyWebViewClient extends WebViewClient {

    // inject javascript method 'onUrlChange'
    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:window.android.onUrlChange(window.location.href);");
    };

    // if your minSdkVersion is 24 you can only use this
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
    {
        String url = view.getUrl();
       // Log.d("LOG","previous_url: " + url);
        return false;
    }

    static class MyJavaScriptInterface {
        @JavascriptInterface
        public void onUrlChange(String url) {
           // Log.d("LOG", "current_url: " + url);
        }
    }

}

如果需要,我将两种方法都放入了其中,您可以取消注释Log.d(...)行以检查URL

在您的MainActivity.java

...
WebView mWebView = (WebView) findViewById(R.id.YOUR_VIEW_ID);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.addJavascriptInterface(new MyWebViewClient.MyJavaScriptInterface(),
        "android");
mWebView.loadUrl(YOUR_TARGET_URL);
...

不要忘记将<uses-permission android:name="android.permission.INTERNET" />放入AndroidManifest.xml