Мне нужно обрабатывать разные типы контента из f:///. Мое приложение отображает автономные веб-сайты в приложении WPF. Все работает, кроме ссылок на другие файлы контента (csv, mailto и pdf).
- Если я зарегистрирую
CefCustomScheme
для «mailto», я получу ProcessRequestAsync и смогу запустить Process.Start(...). Однако всплывает еще одно пустое окно. - Если я затем добавлю второй
CefCustomScheme
для «файла», то ничего не произойдет. Ни один из методовISchemeHandler
ProcessRequestAsync не вызывается.
Я должен иметь возможность обрабатывать все запросы, кроме *.html, в отдельном обработчике.
По сути, я просто хочу воспроизвести поведение MS Web-Browser Control. Там все, что я сделал, это указал на страницу входа (index.htm), и все загрузилось. Затем, если пользователь щелкнет любую ссылку, элемент управления обработает действие и запустит правильный процесс (обработчик содержимого, т. е. Excel для Csv).
Код:
// Startup
var settings = new CefSettings();
settings.LogFile = @"c:\temp\ceflog.txt";
settings.LogSeverity = LogSeverity.Verbose;
settings.IgnoreCertificateErrors = true;
CefCustomScheme mailtoScheme = new CefCustomScheme();
mailtoScheme.SchemeName = "mailto";
mailtoScheme.SchemeHandlerFactory = new SchemeHandlerFactory();
CefCustomScheme filesScheme = new CefCustomScheme();
mailtoScheme.SchemeName = "file";
mailtoScheme.SchemeHandlerFactory = new SchemeHandlerFactory();
settings.RegisterScheme(mailtoScheme);
settings.RegisterScheme(filesScheme);
if (!Cef.Initialize(settings))
throw new InvalidOperationException("Failed to initialize the browser factory");
-- Фабрика Обработчиков Схем
public class SchemeHandlerFactory : ISchemeHandlerFactory {
public ISchemeHandler Create() {
return new CustomSchemeHandler();
}
}
-- Обработчик
public class CustomSchemeHandler : ISchemeHandler {
private static readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public bool ProcessRequestAsync(IRequest request, ISchemeHandlerResponse response, OnRequestCompletedHandler requestCompletedCallback) {
_log.DebugFormat("Processing url: {0}", request.Dump());
var knownContentTypes = new[] {".csv", ".xsls", ".xlsx", ".pdf", ".txt"};
var ext=Path.GetExtension(request.Url);
if(knownContentTypes.Contains(ext)) {
_log.DebugFormat("Starting process for: {0}",request.Url);
Process.Start(request.Url);
return false;
}
return true;
}
ISchemeHandler
и способ их регистрации? - person Szabolcs Dézsi   schedule 06.03.2015filesScheme
, вы по-прежнему ссылаетесь наmailtoScheme
после этого. Мне не удалось заставить ссылки на файлы работать с подходом обработчика схемы. Если вы установитеRequestHandler
элемента управления вашего браузера и поместите код, в котором вы запускаете процесс, в методOnBeforeBrowse
, вы можете добиться желаемого эффекта. Пробовал с CefSharp.Wpf 37.0.0 - person Szabolcs Dézsi   schedule 14.03.2015