Набор элементов управления WebBrowser Режим документа

Итак, я знаю о FEATURE_BROWSER_EMULATION, но либо он не работает для меня, либо управляет только режимом браузера, а не режимом документа.

У меня есть много информации, относящейся к моему случаю ниже, но общий вопрос, на который я думаю / надеюсь, должен иметь простой ответ, который применим ко многим людям: Как мне заставить элемент управления WebBrowser отображаться точно так же, как любая версия IE, установленный пользователем? Я думаю, это сводится к контролю над "Режимом документа"


Я пытаюсь заставить элемент управления WebBrowser отображать HTML так же, как это делает IE10, без изменения HTML (потому что это ненадежно). Мое приложение - это почтовый клиент, который отображает электронную почту в формате HTML, и вот как может выглядеть типичное письмо от GMail:

<div dir="ltr"><div id="" team-id="21062" dir="ltr"><div id="email-body-container" style="width:96%; padding:0; margin:2%; border:solid 1px #E7E7E7;">
  <div id="email-body-header" style="width:94%; padding:3% 3% 2% 3%; background-color:#f5f5f5; border-bottom:solid 1px #eaeaea;">
    <img src="http://www.google.com/adwords/htp/static/legacy/adwords_logo_grey_166x28.png" alt="Google AdWords" width="166" height="28" style="outline:none; text-decoration:none; -ms-interpolation-mode: bicubic; display:block;">
  </div>
</div></div>

У меня есть этот точный HTML-код в файле с именем c: \ test.htm, и я загружаю его в IE, вводя его в адресную строку, а затем загружаю его в элемент управления веб-браузера с помощью Navigate("c:\\test.htm"), и они не отображают то же самое .

Я знаю, что это недействительный HTML, потому что он даже не включает тег html, тег body и т. Д., Но именно так работает GMail, и я не могу это контролировать (или другие странные вещи, которые делают почтовые клиенты). Единственное, что я знаю, это то, что Internet Explorer всегда, кажется, хорошо их отображает (вероятно, большинство людей тестируют с IE, вот почему). Однако они плохо отображаются в элементе управления WebBrowser. Вот HTML-код выше в IE10 (Win8) и в простом приложении WinForms с использованием элемента управления WbeBrowser:

введите описание изображения здесь

Приложение WinForms имеет полосу прокрутки, когда она не нужна, а также граница не соответствует размеру цвета фона. Используя инструменты разработчика IE, я могу попробовать каждую комбинацию режима браузера (от IE7 до IE10) и каждую комбинацию режима документа (стандарты, особенности, стандарты IE7 - IE9), и единственный способ заставить IE отображать как элемент управления WebBrowser - это установить Режим документа на «особенности IE5». В этом случае он отображается так же, как элемент управления WebBrowser, даже если для параметра Browser Mode установлено значение IE10.

Я установил это значение реестра: HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION \ WindowsFormsApplication2.exe

Я попытался установить его на 10000, 10001, 9999, 8888, 9000 и несколько других значений (десятичных, а не шестнадцатеричных), и они не повлияли на эту проблему. Мое имя EXE - WindowsFormsApplication2.exe, я установил свою сборку на x64 и подтвердил, что она работает как 64-разрядный процесс, так что мне не нужно беспокоиться о настройке Wow6432Node вместо этого (но я даже попытался установить это также ).

Итак, я думаю, что это контролирует только режим браузера, но не режим документа? Я также пробовал устаревшую настройку FEATURE_NATIVE_DOCUMENT_MODE, без изменений.

Обратите внимание, я пометил это как TWebBrowser также потому, что изначально я обнаружил эту проблему, используя это, но поскольку почти никто не использует это, я убедился, что смогу воссоздать в реальном простом приложении .NET C # WinForms.


Добавлено 17 мая:

Вот экспорт reg (я удалил все в HKCU, чтобы убедиться, что он ничего не переопределяет в HKLM):

Редактор реестра Windows версии 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"prevhost.exe"=dword:00001f40
"HelpPane.exe"=dword:00002710
"sllauncher.exe"=dword:00001f40
"test.exe"=dword:00002710
"iexplore.exe"=dword:00002711
"windowsformsapplication2"=dword:00002710
"windowsformsapplication2.exe"=dword:00002710
"test"=dword:00002710

Вот как выглядит мой "test.exe" в диспетчере задач:

введите описание изображения здесь


person eselk    schedule 15.05.2014    source источник
comment
p.s. - Извините за длинный вопрос, но я потратил на это несколько дней и не уверен, куда еще обратиться за помощью или как сделать вопрос короче / лучше.   -  person eselk    schedule 16.05.2014
comment
Интересно, что если я переименую свой EXE в iexplore.exe, он будет отображаться как IE. Не думайте, что это решение для меня, это было бы довольно похоже на вирус, если бы я переименовал свой EXE таким образом, и это стало бы проблемой для нашего отдела технической поддержки.   -  person eselk    schedule 16.05.2014
comment
Итак, какая на самом деле версия IE, это v11? Если это так, вы также можете попробовать поиграть со строкой User Agent: stackoverflow.com/a/19601064/1768303   -  person noseratio    schedule 16.05.2014
comment
IE10, я просто хочу, чтобы элемент управления WebBrowser делал то, что я думал, - отображал то, что делает любая версия IE, которую они установили. Вот почему я начал использовать этот элемент управления около 10 лет назад, и раньше он отображался как IE5, но теперь они добавили все совместимость / устаревшие вещи, и я просто хочу все это отключить.   -  person eselk    schedule 17.05.2014
comment
@eselk очевидно, значения 0x2710 и 0x2711 не идентичны.   -  person stanleyxu2005    schedule 19.05.2014


Ответы (1)


Согласно MSDN

10001 (0x2711)  Internet Explorer 10. Webpages are displayed in IE10 Standards 
                mode, regardless of the !DOCTYPE directive.

10000 (0x2710)  Internet Explorer 10. Webpages containing standards-based 
                !DOCTYPE directives are displayed in IE10 Standards mode. 
                Default value for Internet Explorer 10.

MSIE на вашем компьютере использует 0x2711, что означает, что он всегда будет отображать документ в стандартном режиме. Ваше приложение использует 0x2710. Поскольку в вашем тестовом документе нет !doctype, он будет отображаться в режиме Quirks. Это основная причина, по которой веб-страница выглядит иначе.

Обратите внимание, что windowsformsapplication2.exe - допустимая запись для реестра.

В Windows 7

И в MSIE, и в моем приложении есть полоса прокрутки. Извините, я пока не знаю, как сделать так, чтобы полоса прокрутки выглядела в точности так, как это делает MSIE. Но я уверен, что внешний вид полосы прокрутки не имеет ничего общего с FEATURE_BROWSER_EMULATION

person stanleyxu2005    schedule 17.05.2014
comment
Что ж, в любом случае это вселяет в меня надежду. Я добавил экспорт reg и снимок экрана диспетчера задач в конец своего вопроса. Вы видите что-то не так? Похоже, вы на Win7, интересно, это больше не работает на Win8. - person eselk; 18.05.2014
comment
@eselk Я пробовал это в Windows 8. Если вы добавите <!doctype html> в начале тестового документа, и MSIE, и мое приложение будут отображаться хорошо. В противном случае оба браузера будут отображаться неожиданно. - person stanleyxu2005; 18.05.2014
comment
Это, вероятно, что-то вроде этого глупого, и, поскольку это работает для вас (и я предполагаю, что другие, поскольку других ответов / комментариев нет), я собираюсь предположить, что это ответ. Я почти уверен, что пробовал как 10001, так и 10000 для своего EXE, а также видел то же самое до того, как добавил iexplore.exe в реестр. К сожалению, в течение следующих нескольких недель меня включили в другой проект, но, надеюсь, я смогу вернуться и обновить его, когда вернусь к нему. - person eselk; 22.05.2014