zoukankan      html  css  js  c++  java
  • 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添加设置 ,见:

  • 相关阅读:
    javascript 调试代码
    简洁的js拖拽代码
    搭个小窝
    FastDFS随笔
    JDK6和JDK7中String的substring()方法及其差异
    杂笔
    JVM内存随笔
    java中的final和volatile详解
    关于java的Synchronized,你可能需要知道这些(下)
    关于java的Synchronized,你可能需要知道这些(上)
  • 原文地址:https://www.cnblogs.com/kybs0/p/11904417.html
Copyright © 2011-2022 走看看