У меня проблема со встроенным фреймворком Cefsharp Chrome, поэтому у меня есть приложение C# WinForm с фиксированным размером 700x400. Проблема в том, что когда я открываю веб-сайт, он никогда не реагирует на заданный размер. Возьмем приведенный ниже пример веб-сайта Google:
Пользовательское эмулируемое устройство (700x400): Рабочий стол
Как вы видите на картинке, на оси X есть полоса прокрутки с действительно раздражающий пользовательский интерфейс, мне нужно сделать его отзывчивым к размеру формы, например, когда вы используете эмуляцию устройства в своем Google Chrome DevTools.
Пользовательское эмулируемое устройство (700x400): Mobile
Что касается решений, я подумал об использовании функции "SetZoomLevel", чтобы веб-сайт идеально соответствовал размеру формы.
public Stackoverflow(){
public void Zoom(){
var scrollWidth = Convert.ToDouble(Evaluate("Math.max(document.body.scrollWidth, document.documentElement.scrollWidth);"));
var clientWidth = Convert.ToDouble(Evaluate("Math.min(document.body.clientWidth, document.documentElement.clientWidth);"));
var offsetWidth = Convert.ToInt32 (Evaluate("var outer = document.createElement('div'); outer.style.visibility = 'hidden'; outer.style.overflow = 'scroll'; outer.style.msOverflowStyle = 'scrollbar'; document.body.appendChild(outer); var inner = document.createElement('div'); outer.appendChild(inner); var scrollbarWidth = (outer.offsetWidth - inner.offsetWidth); outer.parentNode.removeChild(outer); scrollbarWidth;"));
if (clientWidth < scrollWidth){
double diff = Convert.ToDouble(Form.Width - offsetWidth) / scrollWidth; // 1.2 ^ zoom = scale (%)
double zoom = Math.Round(Math.Log(diff) / Math.Log(1.2), 5);
Chromium.SetZoomLevel(zoom);
}
}
public object Evaluate(string script){
Task<JavascriptResponse> task = Chromium.GetFocusedFrame().EvaluateScriptAsync(script);
task.Wait();
JavascriptResponse response = task.Result;
return response.Success ? (response.Result ?? "") : response.Message;
}
}
Проблема в том, что код не может выполняться, пока страница не загрузится полностью. В результате между двумя картинками выше есть задержка. Меня это раздражает !!!!!
Я знаю, что могу использовать пользовательский агент, чтобы изменить отклик веб-сайта на мобильный режим, но мне не нравится тот факт, что сервер предоставит мне мобильный версия веб-сайта.
CefSettings Settings = new CefSettings();
Settings.UserAgent = "Mozilla/5.0 (Android 4.4; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0";
Cef.Initialize(Settings);
Есть идеи, пожалуйста?
Операционная система: Windows x64.
Программное обеспечение: Visual Studio Community 2019.
Шаблон: WinForm.
Язык: C#.