Winforms CefSharp:使用自定义方案注入自定义CSS文件
我正在使用CefSharp(47)从我无法控制的主机渲染网页,我想对主机提供的CSS进行一些额外的调整 通过阅读GitHub()和here()中的各种主题,我相应地编写了一个自定义方案处理程序: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
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”