Контролът на WebBrowser зададе режим на документ

Така че знам за FEATURE_BROWSER_EMULATION, но или не работи за мен, или контролира само режима на браузър, а не режима на документи.

Имам много информация, специфична за моя случай по-долу, но общият въпрос, на който смятам/надявам се, че трябва да има лесен отговор, приложим за много хора, е: Как да накарам контролата на уеббраузъра да се изобразява точно като всяка версия на 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 да изобразява като контролата на уеб браузъра е да задам режима за документи на „IE5 странности“. В който случай се изобразява същото като контролата WebBrowser, дори ако режимът на браузър е зададен на 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 Registry Editor версия 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 ли е? Ако е така, можете също да опитате да играете с низа на потребителския агент: 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