• C#使用NanUI或ChromiumFx碰到的坑(一)


    最近在花时间封装一个Razor模板+NanUI的Winform组件,发现了有个神奇地方,,由于需要使用CfxResourceHandler,用于把对cshtml文件的请求,编译成html并返回给CEF,这时候发现了个神奇的事情,每条cshtml连接会请求2次,而且header是一样的,这样会导致每个页面都构建两次,浪费资源

     

    经过对比后发现第二次请求的返回的html并不会被加载到cef中,至于去了哪里,不清楚,,对比两次request之后,终于有了发现,,第一次有效请求和第二次无效请求的差别就在于,request的ResourceType属性的取值上,,有效的request.ResourceType==CfxResourceType.MainFrame或者CfxResourceType.SubFrame,而无效的那次请求为SubResource,经查文档注释后,SubResource为默认类型或未知类型,如此一来,就简单处理了,,只要响应MainFrame/SubFrame并返回html后即可:


    private void OnProcessRequest(object sender, Chromium.Event.CfxProcessRequestEventArgs e)
    {
        if (RazorResourceLoader.ExistsHandler(fileName))
       {
            if (request.ResourceType==CfxResourceType.SubResource)
             {
                    callback.Continue();
                    e.SetReturnValue(true);
                    return;
             }
       }
    }
    private void OnGetResponseHeaders(object sender, Chromium.Event.CfxGetResponseHeadersEventArgs e)
    {
                if (_request.ResourceType== CfxResourceType.SubResource)
                {
                    e.ResponseLength =0;
                    e.Response.MimeType ="text/*";
                    e.Response.Status = 200;    //这里一定要返回200,否则在控制台会出现一行404的错误
                    e.Response.StatusText = "OK";
                }

                else

               {  //TODO:处理正常返回

               } 

    }

     上述的神奇,估计是CEF的问题,,应该也会影响到CefSharp

  • 相关阅读:
    FSR薄膜压力传感器使用教程
    3.7 基于51单片机+MC20的路径显示【使用STC15W内核】
    4.6 基于STM32+MC20地图显示路径功能
    ProgressDialog 进度条的初步认识
    初识别进度条
    Spinner simpleAdapte适配器 下拉列表
    下拉菜单 Spinner 简单纯字符串版
    onItemSelected 获取选中的 信息 3种方法
    GridView 二维排布
    datePicker 及 timePicker Diolage弹出对话框式 比较好看的 监听事件
  • 原文地址:https://www.cnblogs.com/kugar/p/10527773.html
Copyright © 2020-2023  润新知