Как поместить элемент управления 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, который начинается как:
<!DOCTYPE html>
<HTML>
<HEAD>
...
Примечание: тип документа ot-in для режима html5
html
За исключением того, что документ не находится в режиме стандартов ie9; это в режиме стандартов ie8:
Если я сначала сохраню 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 находится во встроенном веб-контроле? Кажется, что режим документа выбирается по-разному - может быть, из соображений совместимости?
MarkSil [MSFT] ответил:
@Thomas: Спасибо, что подняли этот вопрос. Элемент управления WebBrowser определяет режим doc так же, как и IE, поскольку он содержит одну и ту же веб-платформу (например, существует один общий файл mshtml.dll для хостов IE и элемента управления WebBrowser). Элемент управления WebBrowser по умолчанию использует режим просмотра в режиме совместимости, что означает, что режимом документации по умолчанию является IE7. Вот сообщение в блоге с более подробной информацией об этом: http://blogs.msdn.com/b/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx.
На что Томас ответил:
@MarcSil (re: WebBrowser Control)
Проблема с использованием записей реестра для выбора режима документа для WebControl заключается в том, что он применяется к приложению в целом. Я пишу плагины для Google SketchUp, где у вас есть окна WebDialog для создания пользовательских интерфейсов - это просто элемент управления WebBrowser в окне. Но это приводит к проблемам, так как я хочу включить режим документа для моего экземпляра элемента управления WebBrowser, а не для всех элементов управления SU WebBrowser в целом.
Итак, мой вопрос: как вы управляете режимом документа для каждого экземпляра для элемента управления WebBrowser?
3 ответа
Вы пробовали установить в своем HTML
<meta http-equiv="X-UA-Compatible" content="IE=9" />
или же
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
что означает последнюю версию
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
FEATURE_BROWSER_EMULATION не работает с CoInternetSetFeatureEnabled. Документация INTERNETFEATURELIST не обновляется с IE7.
Поскольку параметр функции находится в разделе HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl, вы можете переопределить значение в своем процессе с помощью ловушки API реестра.