Как поместить элемент управления 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
За исключением того, что документ не находится в режиме стандартных стандартов; он находится в режиме стандартных стандартов:
Если сначала сохранить html на моем компьютере:
а затем просмотреть этот html-документ, IE помещается в стандартный режим:
Мой вопрос в том, как обновить мою 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?
- Контейнеры стандартной библиотеки с дополнительными параметрами шаблона?
- size_t всегда без знака?
- Может ли (доменное имя) поддомены подчеркивать «_»?
- Почему стандартные iteratorы диапазона вместо ?
- Эффекты ключевого слова extern для функций C
- Разница между void main и int main?
- Когда функция имеет параметр массива определенного размера, почему она заменяется указателем?
- Где именно стандарт C ++ говорит о разыменовании неинициализированного указателя - это неопределенное поведение?
Вы пытались установить в своем 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-интерфейса реестра.