• Cef 因系统时间不正常,导致页面访问空白问题


    当我们的系统时间不正常,比如设置一个日期-1999年9月9日,会引发证书问题。

    系统时间不正常-IE有概率能访问

    触发NavigateError事件,异常代码INET_E_INVALID_CERTIFICATE

    -- 这是一个必要不充分条件,系统时间不正常时IE有相关证书异常,更新时间能解决此类异常

    系统时间不正常-Cef完全无法访问

    1.使用Cef-Demo,异常显示如下:

    2.ChromiumWebBrowser控件,此类异常也会触发LoadError事件

    异常Code是CefErrorCode.Aborted,文件下载取消等异常信息也是Aborted类型,所以无法判断当前异常是否证书相关异常。

    那么有没有Cef浏览器有没有其它相关异常事件,可以准确获知相关证书异常呢?

    Cef系统时间不正常的修复方案

    Cef有请求委托RequestHandler对象,可以在本地定制相关实现

    _cefBrowser.RequestHandler = new ChromeBrowserRequestHandler();

    新建ChromeBrowserRequestHandler,继承默认RequestHandler,把相关事件暴露给外界调用

     1     public class ChromeBrowserRequestHandler : DefaultRequestHandler
     2     {
     3         /// <summary>
     4         /// 证书异常
     5         /// 有很多种,比如系统时间不正确引发证书异常 CertDateInvalid
     6         /// </summary>
     7         public event EventHandler<(string url, CefErrorCode errorCode)> CertificateError;
     8         public override bool OnCertificateError(
     9           IWebBrowser browserControl,
    10           CefSharp.IBrowser browser,
    11           CefErrorCode errorCode,
    12           string requestUrl,
    13           ISslInfo sslInfo,
    14           IRequestCallback callback)
    15         {
    16             callback.Dispose();
    17             //证书异常
    18             CertificateError?.Invoke(this,(requestUrl,errorCode));
    19             return false;
    20         }
    21     }

    获取到证书异常的触发时机,如何解决系统时间不正常?

    详见我的博客:C# 同步更新系统时间

    注:更新系统时间,需要管理员权限。相关app.manifest添加设置 ,见:

  • 相关阅读:
    linux服务器安装nginx及使用
    服务器搭建
    Linux安装mysql5.7
    个人服务器的选择
    DECODE函数简介
    ORACLE数据库优化
    Mac下JD-GUI无法使用
    Qt 中QString 字符串操作:连接、组合、替换、去掉空白字符
    [Qt初级] 解决 中QMainWindow和QDockWidget添加布局失败问题
    我的JS 中级学习篇
  • 原文地址:https://www.cnblogs.com/kybs0/p/11904417.html
Copyright © 2020-2023  润新知