Я пытаюсь использовать CefSharp web browser внутри приложения .NET 4.0. Я загружаю страницы из html и js контента, хранящихся локально. Таким образом, веб-браузер открывает страницы с протоколом file://
.CefSharp and Crossdomain
страница переходы сделаны с JQuery (AJAX), и я получаю XMLHttpRequest cannot load file:///XXXXXXXX/Debug/res/www/shared/js/src/views/homeView.html. Cross origin requests are only supported for HTTP.
Я попытался с помощью Schemehandler и переопределить функцию ProcessRequest для обработки загрузки страниц внутри домена file://
.
class SchemeHandlerFactory : ISchemeHandlerFactory
{
public ISchemeHandler Create()
{
return new SchemeHandler();
}
}
class SchemeHandler : ISchemeHandler
{
public SchemeHandler()
{
}
public bool ProcessRequest(IRequest request, ref string mimeType, ref Stream stream)
{
var uri = new Uri(request.Url);
var segments = uri.Segments;
var file = segments[segments.Length - 1];
var bytes = File.ReadAllBytes(request.Url.Replace("file:///",""));
stream = new MemoryStream(bytes);
mimeType = "text/html";
return true;
}
}
И я использую его в моем коде формы, добавив:
CEF.RegisterScheme("file", new SchemeHandlerFactory());
это ничего не меняет.
Я проверил журналы фиксации на репо CefSharp, и он говорит, что теперь поддерживается Cross AppDomain, но как его использовать? https://github.com/cefsharp/CefSharp/pull/35
Я также думал о перекомпиляции CefSharp добавить Access-Control-Allow-Origin для всех запросов, возвращаемых в веб-браузере, когда он выполняет GET операции на локальных файлах.
У меня нет идей.
Ваш ответ, вероятно, правильный. Тем не менее, очень важно отметить: * cross-AppDomains - это не то же самое, что кросс-домены в веб-смысле *. Это две очень разные вещи. AppDomains - это сложная концепция, которая может быть использована для разделения приложения .NET на «разгружаемые», разделенные части. Таким образом, у них есть похожие имена, но они действуют по-разному. –