Как поместить элемент управления WebBrowser в IE9 в стандарты?

Я использую автоматизацию (то есть автоматизацию 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, который начинается с:

    ... 

Примечание: html5-режим opt-in doctype html

За исключением того, что документ не находится в режиме стандартных стандартов; он находится в режиме стандартных стандартов: 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 находится внутри встроенного webcontrol? Кажется, что режим документа выбран по-разному – может быть, по соображениям совместимости?

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

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

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

@MarcSil (re: WebBrowser Control)

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

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

Вы пытались установить в своем html

  

или

  

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

IE9 «версия» элемента управления WebBrowser, как и версия IE8, на самом деле представляет собой несколько браузеров в одном. В отличие от версии IE8, у вас есть немного больше контроля над режимом рендеринга внутри страницы, изменяя doctype. Конечно, чтобы изменить режим браузера, вы должны установить свой реестр, как более ранний ответ. Вот расположение 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) -Webpages отображаются в стандартном режиме IE8, независимо от директивы! DOCTYPE.
  • 8000 (0x1F40) – Веб-страницы, содержащие стандартизованные! Директивы DOCTYPE отображаются в режиме IE8.
  • 7000 (0x1B58) – Веб-страницы, содержащие стандарты! Директивы DOCTYPE отображаются в режиме стандартов IE7.

Полные документы:

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

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

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

  • Правильное изменение неопределенного поведения, если число больше ширины типа?
  • Порядок оценки в параметрах функции C ++
  • Возьмите адрес элемента массива «один конец прошлого» через индекс: легальный по стандарту C ++ или нет?
  • std :: вектор и непрерывная память многомерных массивов
  • Когда вы можете опустить расширение файла в директиве #include?
  • Является ли законным возвращаться в main () на C ++?
  • Препроцессор C ++ идентичен препроцессору C?
  • Bitshift и целое продвижение?
  • Как определить версию стандарта C ++, используемую компилятором?
  • Почему компиляторы позволяют строковым литералам не быть const?
  • Почему стандарты C или C ++ явно не определяют символ как подписанный или неподписанный?
  • Interesting Posts

    Robocopy: показывать пропущенные файлы и файлы с ошибкой при копировании

    Как отладить программу MPI?

    Класс vs Struct только для данных?

    Блок ThreadPoolExecutor, когда очередь заполнена?

    Как настроить Linux на работу как сервер RFCOMM SPP?

    Не удается получить доступ к pear.php.net от OSX Lion

    Лучший подход для GPGPU / CUDA / OpenCL в Java?

    Выполнение функции в фоновом режиме при использовании ограниченного количества ядер / streamов и очереди дополнительных исполнений?

    Могу ли я получить аргументы командной строки других процессов из .NET / C #?

    Какому компилятору я должен доверять?

    Подключение перегруженных сигналов и слотов в Qt 5

    объективное с неявное преобразование теряет целую точность «NSUInteger» (иначе «unsigned long») до предупреждения «int»

    Начальная емкость вектора в C ++

    Определение составного ключа с автоматическим добавлением в MySQL

    Регулярное выражение с переменным числом групп?

    Давайте будем гением компьютера.