【问题标题】:check url change in webview android not work检查webview android中的url更改不起作用
【发布时间】:2018-08-21 20:32:11
【问题描述】:

如何查看Url变成WebView

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

此功能仅适用于第一次更改

【问题讨论】:

    标签: java android url webview


    【解决方案1】:

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

    因此,如果您的 minSdkVersion 为 24 或更高,您只能使用 public boolean shouldOverrideUrlLoading(WebView, WebResourceRequest),但使用 shouldOverrideUrlLoading()(就像您的代码一样)可以在 URL 更改时获取 previous URL。如果要在 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

    【讨论】:

      【解决方案2】:

      请在本期使用shouldInterceptRequest

      @Override
      public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
      
      return super.shouldInterceptRequest(view, url);
      
      }
      

      它可以用来检查webview中所有的url变化

      【讨论】:

      • shouldInterceptRequest 已弃用。
      猜你喜欢
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 2015-12-05
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多