Webview ShouldOverrideUrlLoading未调用

时间:2017-11-23 10:50:04

标签: android webview

我有一个类似下面给出的代码的webview,我试图在webview中登录时捕获重定向url,所以我使用了ShouldOverrideUrlLoading方法但是控件永远不会进入这个方法。

我已经阅读了与此相关的其他答案并尝试了一些事情,例如使用webView.loadDataWithBaseURL,webview变为空白并尝试使用chromeclient并捕获url但这仅适用于首次加载而不是重定向。

可能是什么问题?

    WebView webView = (WebView) findViewById(R.id.loginwebview);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setAllowContentAccess(true);

    webView.loadUrl("https://www.xfinityprepaid.net/CustomerActivation/CustomerActivation");

    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.clearView();
    webView.setHorizontalScrollBarEnabled(false);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        webView.getSettings().setDatabasePath("/data/data/" + this.getPackageName() + "/databases/");
    }
    webView.setVerticalScrollBarEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDisplayZoomControls(false);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setPluginState(WebSettings.PluginState.OFF);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    webView.setInitialScale(1);

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
             {
                Log.d("url",url);
                if (url.contains("account-secured/dashboard")){
                    startActivity(new Intent(LoginActivity.this,MainActivity.class));
                    finish();
               }else {
                    view.loadUrl(url);
                }
            }


            return false;
        }

    });

2 个答案:

答案 0 :(得分:1)

如果您的链接是本地链接,请尝试添加app://前缀或等效内容。

来自Migrating to WebView in Android 4.4

  

例如,新的WebView可能不会为这样的链接调用你的shouldOverrideUrlLoading()方法:

<a href="showProfile">Show Profile</a>
     

您可以使用,而不是如上所示在链接中使用简单字符串   自定义方案,如下所示:

<a href="example-app:showProfile">Show Profile</a>

当我将链接从<a href="#4">更改为<a href="app://4">时,这对我有用。

class MyWebViewClient(val activity: AppCompatActivity) : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
        activity.findViewById<RadioButton>(AMAinActivity.primaryButtons[3]).performClick()
        return true
    }
}

请注意,即使已弃用该方法,该方法仍可正常工作。

要拦截您的链接,请点击指定其完整路径的链接,即<a href="https://www.xfinityprepaid.net/CustomerActivation/CustomerActivation"&gt;: -

答案 1 :(得分:-1)

尝试覆盖onReceivedSslError。