android - Xamarin.Forms android WebView 空白,没有有效的 SSL 证书(开发环境)
问题描述
在我的本地 PC 开发环境中,我有一个 dotnetcore 2.2 项目在端口 5000 作为 https 和 5001 作为 http 运行。我需要在我的开发环境中使用 https。在我的 PC 上,我可以通过https://localhost:5000/输入而不会出现任何错误(VS 安装 localhost SSL 证书)。使用我的 PC IP https://192.168.0.2:5000浏览器启动 SSL 证书错误(SSL 证书适用于 localhost)。我正在为 Android(9.0API 级别 28)和 iOS 开发 Xamarin.Forms 4.5.0.396,并且我正在使用标准的 WebView 控件。
在 Android 中,当我导航 (webView.Source) 到http://192.168.0.2:5001时,它可以工作,但是当我尝试https://192.168.0.2:5000时,webView 保持空白。没有例外,但已启动导航事件。我尝试了几种方法,例如暴露在:
在 Android 4 ICS 上使用 SSL 客户端证书的 WebView
public void onReceivedClientCertRequest(WebView 视图,ClientCertRequestHandler 处理程序,字符串 host_and_port)
ClientCertRequestHandler 未知且不知道要引用的程序集
- (https, ssl, tls) Setup network_security_config.xml 中的 Xamarin Android 错误以及此问题中的其他内容对我不起作用。
另外,我知道这不是解决方案,但我实现了一个自定义渲染器(https://docs.microsoft.com/es-es/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview)来尝试覆盖 SSL 验证方法,但它不起作用。
有什么建议吗?
解决方案
解决方案是覆盖 JavaScript WebClient 类上的 OnReceivedSslError 方法,如下所示:
public class JavascriptWebViewClient : WebViewClient
{
string _javascript;
public JavascriptWebViewClient(string javascript)
{
_javascript = javascript;
}
public override void OnReceivedSslError(Android.Webkit.WebView view, SslErrorHandler handler, Android.Net.Http.SslError error)
{
//base.OnReceivedSslError(view, handler, error);
handler.Proceed();
}
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
base.OnPageFinished(view, url);
view.EvaluateJavascript(_javascript, null);
}
}
问题是添加 OnReceivedSllError 我有两个 MAX_PATH 错误...不知道为什么,但是重建或清理解决方案不起作用。
我多次清理解决方案,移动到最靠近根文件夹的位置。Clean and Rebuild without run, then run 对我有用,但此方法没有断点停止。
这在 Xamarin.Forms 4.5.0.396 上是一个非常奇怪的行为,但在更新到 Xamarin.Forms 4.5.0.495 后它可以工作并在断点处停止
推荐阅读
- mysql - 如何修复正在搜索行并缓慢更新的数据库
- regex - 在我的正则表达式中无法匹配带有以下 \ 和所有符号的单词
- python - genfromtxt 在 Jupyter 中打开表的问题
- python - 在 Python 中按关键字对 Excel 数据表进行分类
- javascript - 当使用 Tailwind 样式的 Vue 应用程序中出现新 div 时,如何在不向下滚动的情况下自动进入页面底部?
- google-api - 我们能否向注册了 Android Management API 解决方案的手机发送通知(谷歌)
- r - sapply + if - 保留列名
- python - 将存储在元组中的“时间值”转换为 24 小时格式
- javascript - XLSX 到 CSV 文件转换为 API 调用
- c - PIC 编程计数器和触摸传感器问题