Спасибо amaitland за то, что он направил меня в правильном направлении:
Я настоятельно рекомендую не использовать file: /// при загрузке с локального диска. Применяются различные ограничения безопасности, и существует множество ограничений. Я бы предложил использовать обработчик Scheme или реализовать свой собственный IResourceRequestHandlerFactory. (Загрузка данных: закодированный URI также очень удобен, особенно для проекта OffScreen). Если вы решите игнорировать этот совет, вам придется решать любые проблемы, которые у вас есть, используя file: /// самостоятельно. ceforum - лучший ресурс.
Скопировано из: https://github.com/cefsharp/CefSharp/wiki/General-Usage#file -uri-file
Решение - создать обработчик пользовательской схемы:
https://github.com/cefsharp/CefSharp/wiki/General-Usage#scheme - обработчик
1) Я добавил angular, bootstrap и jquery файлы в качестве ресурсов для моего проекта Visual Studio.
2) Я создал DiskSchemeHandlerFactory.cs:
public class DiskSchemeHandlerFactory : ISchemeHandlerFactory
{
private static readonly string _SchemeName = "disk";
private static readonly IDictionary<string, string> _ResourceDictionary;
public string SchemeName
{
get { return _SchemeName; }
}
static DiskSchemeHandlerFactory()
{
_ResourceDictionary = new Dictionary<string, string>
{
{ "/angular.min.js", Properties.Resources.angular_min },
{ "/angular.min.js.map", Properties.Resources.angular_min_js },
{ "/bootstrap.min.js", Properties.Resources.bootstrap_min1 },
{ "/bootstrap.min.css", Properties.Resources.bootstrap_min },
{ "/jquery.min.js", Properties.Resources.jquery_min }
};
}
public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
{
//Notes:
// - The 'host' portion is entirely ignored by this scheme handler.
// - If you register a ISchemeHandlerFactory for http/https schemes you should also specify a domain name
// - Avoid doing lots of processing in this method as it will affect performance.
// - Uses the Default ResourceHandler implementation
var uri = new Uri(request.Url);
var fileName = uri.AbsolutePath;
string resource;
if (_ResourceDictionary.TryGetValue(fileName, out resource) && !string.IsNullOrEmpty(resource))
{
var fileExtension = Path.GetExtension(fileName);
return ResourceHandler.FromString(resource, fileExtension);
}
return null;
}
}
3) Я изменил конструктор stati c MyWebBrowser.xaml.cs:
static MyWebBrowser()
{
if (Cef.IsInitialized == false)
{
var diskSchemeHandlerFactory = new DiskSchemeHandlerFactory();
var settings = new CefSettings();
settings.RegisterScheme(new CefCustomScheme()
{
SchemeName = diskSchemeHandlerFactory.SchemeName,
SchemeHandlerFactory = diskSchemeHandlerFactory
});
Cef.Initialize(settings);
}
}
4) Наконец я изменил файл пути к странице html:
<script src="disk://angular/angular.min.js"></script>
<script src="disk://jquery/jquery.min.js"></script>
<script src="disk://bootstrap/bootstrap.min.js"></script>
Возможно, я изменил ее, чтобы она работала и с полными путями к файлам. С этим решением мне приходится компилировать свой проект каждый раз, когда я хочу использовать другой файл ...