Я пытаюсь включить проверку орфографии для встроенного браузера CefSharp Chromium (v3.3396.1786, установленного с NuGet) и компонента CefSharp.WPF (v67).Я могу настроить проверку орфографии на одном языке, но не могу изменить словарь для проверки орфографии во время выполнения.Я попробовал показанные примеры и связал на странице github CefSharps , но безуспешно.
Мой браузер CefSharp всегда использует языковой стандарт для определения языка, используемого для проверки орфографии, независимо от того, что я установил сRequestContext.SetPreference()
Это мой код, который инициализирует Cef:
public static void Initialize()
{
var settings = new CefSettings
{
BrowserSubprocessPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
Environment.Is64BitProcess ? "x64" : "x86",
"CefSharp.BrowserSubprocess.exe"),
Locale = "de-DE",
RemoteDebuggingPort = 8088,
};
// Set BrowserSubProcessPath based on app bitness at runtime
// Make sure you set performDependencyCheck false
Cef.Initialize
(
settings,
performDependencyCheck: false,
browserProcessHandler: null
);
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
}
Фактический браузер настроен и создан другим методом:
private void create_web_browser()
{
current_web_browser = new ChromiumWebBrowser
{
Visibility = Visibility.Hidden,
BrowserSettings = new BrowserSettings
{
FileAccessFromFileUrls = CefState.Enabled,
UniversalAccessFromFileUrls = CefState.Enabled,
Javascript = CefState.Enabled,
ImageLoading = CefState.Enabled,
JavascriptAccessClipboard = CefState.Enabled,
JavascriptCloseWindows = CefState.Enabled,
JavascriptDomPaste = CefState.Enabled
}
};
current_helper = new ChromiumObjectForScriptingHelper(web_browser_ready_async, current_web_browser);
if (ToolbarConfig != null)
{
current_helper.SetToolbarConfig(ToolbarConfig);
}
current_web_browser.RegisterJsObject("callbackObj", current_helper);
var cur_dir = Directory.GetCurrentDirectory();
var url = $"file://{cur_dir}/ckeditor/editor.html";
current_web_browser.Address = url;
current_web_browser.RequestContext = new RequestContext();
current_web_browser.RequestContext.SetPreference("browser.enable_spellchecking", true, out _);
current_web_browser.RequestContext.SetPreference("spellcheck.dictionaries", new List<string> { "en-US" }, out _);
grid.Children.Add(current_web_browser);
}
Дополнительный методиспользуется, чтобы позволить пользователю позже сменить язык:
public void SetSpellcheck(Spellcheck language)
{
if (language == Spellcheck.None) return;
current_web_browser.RequestContext.SetPreference("spellcheck.dictionaries", new List<string> { get_locale_for_language(language) }, out _);
}
Как вы можете видеть, я пытаюсь установить параметры проверки правописания, но независимо от того, что я там установил, это не имеет никакого эффекта.Я мог установить enable_spellcheck
в false, и он все еще проверяет орфографию, и словари, которые я установил, также игнорируются.Вместо того, что я вставил в словари, будет использоваться язык, ранее установленный в Locale
.(Я проверил переменную out, но ошибок не было) Я также попытался использовать глобальный RequestContext, но безуспешно.
Видимо, другие люди заставили его работать так или иначе, поэтому я чувствую, что упускаю что-то важное здесь или делаю что-то совершенно глупое.
Другое дело, что, если я использую GetAllPreferences(true)
, чтобы получить список всех настроек со значениями по умолчанию, я просто получаю null
.