Загрузите новый html в браузер CefSharp, сохраняя положение прокрутки

У меня есть браузер CefSharp в проекте WPF. Он отображает html, который в основном вводится пользователем. Когда html меняется, мне нужно перезагрузить браузер, что я делаю следующим образом:

private void UpdateHTML(ChromiumWebBrowser browser) {
  string outputHTML = this.PrepareHTMLFromUserInput(); 
  string url = @"file:///" + this.GetResourcePath();
  browser.LoadHtml(outputHTML, url);
}

Это прекрасно работает, но всегда прокручивает браузер вверх. Я хочу сохранить смещение y. Как я могу это сделать?


person William Jockusch    schedule 07.04.2016    source источник
comment
Какую версию CefSharp вы используете? Я никогда не слышал о методе LoadHtml для ChromiumWebBrowser...   -  person Il Vic    schedule 07.04.2016
comment
LoadHtml — это метод расширения, под капотом он регистрирует IResourceHandler. Вы можете выполнить некоторый javascript для прокрутки окна или включить тег привязки в свой url, использовать некоторый javascript, чтобы определить, какой тег вам нужно добавить. Или выберите другой подход и используйте JavaScript для заполнения существующей формы. (или измените свои звонки на ajax).   -  person amaitland    schedule 08.04.2016


Ответы (2)


Частичный ответ: перенос браузера в UserControl, который, в свою очередь, находится внутри ScrollViewer, позволяет сохранить смещение по оси y. Но теперь у меня новая проблема — мне нужно настроить высоту ScrollViewer и UserControl, чтобы не отставать от изменений высоты браузера.

<ScrollViewer x:Name="MyScrollViewer" Grid.Row="1">
  <UserControl x:Name="WrappingUserControl" Height="2000">
    <cefSharp:ChromiumWebBrowser x:Name="EditorBrowser" Address="about:blank"/>
  </UserControl>
</ScrollViewer>
person William Jockusch    schedule 07.04.2016
comment
Возможно, вам придется отправить Mouse Wheel событий в браузер, чтобы это работало незаметно. Я бы сказал, что это больше усилий, чем оно того стоит. Невозможно напрямую получить отображаемый размер окна, вам нужно выполнить javascript (см. FAQ). - person amaitland; 08.04.2016

Одним из неоптимальных решений может быть запись в файл, загрузка его один раз, а затем вызов Reload:

browser.Load("c:\....mypath.html");
...
File.AppendText("<p>my html</p>");
...
browser.Reload();

Он сохранит положение прокрутки, где пользователь оставил его.

person Teolazza    schedule 17.10.2016