我正在使用CefSharp(47)从我无法控制的主机渲染网页,我想对主机提供的那些进行一些额外的CSS调整 .

通过GitHub(https://github.com/cefsharp/CefSharp/blob/cefsharp/47/CefSharp.Example/CefSharpSchemeHandlerFactory.cs)和这里(CefSharp custom SchemeHandler)阅读各种主题,我相应地编写了一个自定义方案处理程序:

public class CustomSchemeHandlerFactory : ISchemeHandlerFactory
{
    public const string SchemeName = "custom";

    public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
    {
        Console.WriteLine(request.Url);

        if (schemeName.ToLower() == SchemeName.ToLower())
        {
            // Do some stuff
        }
        return null;
    }
}

我尝试以下列方式将其绑定在我的应用程序中:

CefSettings settings = new CefSettings();
            settings.CachePath = browserCachePath;
            settings.RegisterScheme(new CefCustomScheme()
            {
                SchemeName = CustomSchemeHandlerFactory.SchemeName,
                SchemeHandlerFactory = new CustomSchemeHandlerFactory()
            });
            Cef.Initialize(settings);

然后应用程序浏览到相应的网站,并使用'LoadingStateChanged'事件然后触发一些JavaScript来注入我想要加载的CSS文件:

string linkText = "<link rel=\u0022stylesheet\u0022 type=\u0022text/css\u0022 href=\u0022custom://custom.css\u0022>";
        var jsFunctionText = string.Format("(function() {{ $('head').append('{0}'); return true;}}) ();", linkText);

        var injectionTask = await _myBrowser.GetMainFrame().EvaluateScriptAsync(jsFunctionText, null);

......成功了 .

但我的自定义资源处理程序'Create'事件永远不会被触发 .

我只能假设处理程序没有正确注册,所以我很感激任何有关正常工作的建议/帮助!

谢谢!