Android WebView - 拦截URL加载

时间:2016-09-29 04:43:38

标签: android webview intercept

我正在尝试从付款门户确定成功的付款事件。 您可能知道此过程:您将“回调网址”作为其他参数之一发送到付款网站。付款后,网站会将浏览器重定向到您的“回调网址”。

由于这是Android应用程序,因此我将自定义方案('myapp:// order / 123')指定为自定义网址作为'回调网址' 然后我使用以下技术拦截重定向到我的'回调URL'以执行一些自定义操作。

mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            LOG.info("Inside shouldOverrideUrlLoading(), url: {}", url);

            if (url.startsWith("myapp://")) {
                onPaymentPerformed();
                return true;
            } else {
                return false;
            }
        }
}

它工作了好几个月,但最近它开始失败了。我不知道为什么,但可能是由于设备更新。此方法已停止调用'myapp://'url。我检查了日志,发现了以下消息

I/chromium: [INFO:CONSOLE(2174)] "Mixed Content: The page at 'https://www.liqpay.com/en/checkout/success/xxxx' was loaded over a secure connection, but contains a form which targets an insecure endpoint 'myapp://order/7'. This endpoint should be made available over a secure connection.", source: https://static.liqpay.com/checkout/160922113118/js/index.js (2174)

然后我尝试将'myapp:// order / 123'更改为'https://order/123',但是也没有为此url调用方法shouldOverrideUrlLoading(),而是在webview中看到标准错误消息:

The webpage at https://order/123 could not be loaded because: net::ERR_NAME_NOT_RESOLVED

我在互联网上发现没有类似的内容,请帮助

1 个答案:

答案 0 :(得分:0)

您可以继承WebClient并覆盖onReceiveSslError方法。

 private class SSLTolerentWebViewClient extends WebViewClient {
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed(); // proceed ignoring ssl error. 
    }
}

看看是否有效。