Как поместить элемент управления WebBrowser в IE9 в стандарты? - PullRequest
27 голосов
/ 04 ноября 2010

Я использую автоматизацию (т.е. автоматизацию COM) для отображения некоторого HTML в Internet Explorer (9):

ie = CoInternetExplorer.Create;
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(szSourceHTML);
webDocument.Close();
ie.Visible = True;

Появляется Internet Explorer, показывая мой HTML, который начинается как:

<!DOCTYPE html>
<HTML>
<HEAD>
   ...

Примечание: oct-in ot-in в режиме стандартов html5 html

За исключением того, что документ не находится в режиме стандартов ie9;он находится в режиме стандартов ie8: alt text


Если я сначала сохраню html на моем компьютере:

alt text

, а затем просмотрим , что HTML-документ, IE переводится в стандартный режим:

alt text

Мой вопрос: как обновить функцию SpawnIEWithSource(String html), чтобы браузер перешел в стандартный режим?

void SpawnIEWithSource(String html)
{
   Variant ie = CoInternetExplorer.Create();
   ie.Navigate2("about:blank");
   webDocument = ie.Document;
   webDocument.Write(html);
   webDocument.Close();
   ie.Visible = true;
}

Редактировать: более подробный, менее понятный или читаемый пример кода, который не поможет в дальнейшем вопросе:

IWebBrowser2 ie;
CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_WebBrowser2, ie);
ie.AddRef();
ie.Navigate2("about:blank");

IHtmlDocument doc;
dispDoc = ie.Document;
dispDoc.AddRef();
dispDoc.QueryInterface(IHTMLDocument2, doc);
dispDoc.Release()
doc.Write(html); 
doc.Close();
doc.Release();
ie.Visible = true;
ie.Release();

Обновление

Комментатор спросил в записи ieblog Тестирование сайтов с режимом браузера и режимом Doc :

Можем ли мы получить описание того, как определяется режим документа, когда содержимое HTML находится в пределахвстроенный веб-контроль?Похоже, что режим документа выбирается по-другому - может быть, из соображений совместимости?

MarkSil [MSFT] ответил:

@ Томас: Спасибо за вопрос.Элемент управления WebBrowser определяет режим doc так же, как и IE, поскольку он содержит одну и ту же веб-платформу (например, существует один общий файл mshtml.dll для хостов IE и элемента управления WebBrowser).Элемент управления WebBrowser по умолчанию использует режим просмотра в режиме совместимости, что означает, что режимом документации по умолчанию является IE7.Вот сообщение в блоге с более подробной информацией об этом: blogs.msdn.com /.../ more-ie8-extensibility-улучшений.aspx .

На что Томас ответил:

@ MarcSil (re: WebBrowser Control)

Проблема с использованием записей реестра для выбора режима документа для WebControl заключается в том, что он применяется к приложению в целом.Я пишу плагины для Google SketchUp, где у вас есть окна WebDialog для создания пользовательских интерфейсов - это просто элемент управления WebBrowser в окне.Но это приводит к проблемам, так как я хочу включить режим документа для моего экземпляра элемента управления WebBrowser, а не для всех элементов управления SU WebBrowser в целом.

Итак, мой вопрос: как вы управляете документом?режим на экземпляр для элемента управления WebBrowser?

Ответы [ 3 ]

28 голосов
/ 04 ноября 2010

Вы пробовали установить в своем HTML

<meta http-equiv="X-UA-Compatible" content="IE=9" />

или

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

, что означает последнюю версию

13 голосов
/ 18 марта 2011

IE9-версия элемента управления WebBrowser, как и версия IE8, на самом деле представляет собой несколько браузеров в одном.В отличие от версии IE8, у вас есть немного больший контроль над режимом рендеринга на странице путем изменения типа документа.Конечно, чтобы изменить режим браузера, вы должны настроить свой реестр, как предыдущий ответ.Здесь находится FEATURE_BROWSER_EMULATION:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_BROWSER_EMULATION
                                   contoso.exe = (DWORD) 000090000

Вот полный набор кодов:

  • 9999 (0x270F) - Internet Explorer 9. Веб-страницыотображается в режиме стандартов IE9 независимо от директивы! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в режиме IE9.
  • 8888 (0x22B8) -Веб-страницы отображаются в режиме стандартов IE8 независимо от директивы! DOCTYPE.
  • 8000 (0x1F40) - веб-страницысодержащие основанные на стандартах директивы! DOCTYPE отображаются в режиме IE8.
  • 7000 (0x1B58) - Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в режиме стандартов IE7.

Полная документация:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

2 голосов
/ 05 ноября 2010

FEATURE_BROWSER_EMULATION не работает с CoInternetSetFeatureEnabled . Документация INTERNETFEATURELIST не обновляется с IE7.

Поскольку параметр функции находится в разделе HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl, вы можете иметь возможность переопределить значение в вашем процессе через хук API реестра.

...