Winforms CefSharp:使用自定义方案注入自定义CSS文件

Winforms CefSharp:使用自定义方案注入自定义CSS文件,winforms,cefsharp,Winforms,Cefsharp,我正在使用CefSharp(47)从我无法控制的主机渲染网页,我想对主机提供的CSS进行一些额外的调整 通过阅读GitHub()和here()中的各种主题,我相应地编写了一个自定义方案处理程序: public class CustomSchemeHandlerFactory : ISchemeHandlerFactory { public const string SchemeName = "custom"; public IResourceHandler Create(IBr

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

通过阅读GitHub()和here()中的各种主题,我相应地编写了一个自定义方案处理程序:

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);
string linkText=”“;
var jsFunctionText=string.Format(((function(){{$('head').append({0}');return true;}}})(;”,linkText);
var injectionTask=await _myBrowser.GetMainFrame().evaluateScript异步(jsFunctionText,null);
…成功了

但我的自定义资源处理程序“创建”事件从未触发

我只能假设处理程序没有被正确注册,因此我非常感谢任何建议/帮助,以使其正常工作


谢谢

在调用脚本之前,是否正在检查加载StateChangeDargs.IsLoading==false?您可以打开
DevTools
并手动执行脚本,以确保语法正确,查看是否调用了
SchemeHandler
。是的,在启动脚本之前会检查IsLoading(成功总是正确的)。由于未知原因,我无法打开DevTools(未查看)-但是,似乎在调用ShowDevTools()后,我收到一个Windows 8通知,说没有应用程序能够打开该文件类型!我在可执行目录中有devtools_resources.pak(带有locales子文件夹)…还有更多信息。我通过更多的JS注入添加了定期检查,以测试DOM中的所有链接:var-activeLinks=$('link');]。自定义方案链接肯定存在。Debug.log有以下原因:[0405/130734:INFO:CONSOLE(0)]“拒绝加载样式表”custom://custom.css/'因为它违反了以下内容安全策略指令:“style src'self”“unsafe inline”