Така че знам за 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" в диспечера на задачите:
0x2710
и0x2711
не са идентични. - person stanleyxu2005   schedule 19.05.2014