这是一个WebView,它加载页面并在单击按钮时触发fetch()。该页面正在浏览器中工作正常,但是,在WebView中单击时不执行任何操作。
override fun onCreate(savedInstanceState: Bundle?) { var mWebView = findViewById(R.id.activity_main_webview) as WebView var webSettings = mWebView.getSettings() webSettings.setDomStorageEnabled(true) webSettings.setJavaScriptEnabled(true) webSettings.setLoadWithOverviewMode(true) mWebView.webViewClient = WebViewClient() mWebView.loadUrl("https://example.com") }
Android Studio中的调试控制台中的错误是:
E/chromium: [ERROR:ssl_client_socket_impl.cc(959)] handshake failed; returned -1, SSL error code 1, net_error -200 I/chromium: [INFO:CONSOLE(0)] “Uncaught (in promise) TypeError: Failed to fetch”, source: https://example.com/ (0)
解决
原因:https://issuetracker.google.com/issues/36907478#c15
将此替代方法添加到您的WebViewClient实现中。您需要使用Android SDK 2.2(API级别8)或更高版本进行编译。该方法从2.2(API级别8)开始出现在公共SDK中,但是我们已经在运行2.1、1.6和1.5的设备上对其进行了测试,并且也可以在这些设备上运行(因此,这种行为一直存在)。
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { handler.proceed(); // Ignore SSL certificate errors }