Веб-браузер Delphi и CSS3

Мое приложение загружает некоторый HTML-код в веб-браузер (TEmbeddedWB с bsalsa.com), и я хотел бы использовать некоторые функции CSS3, такие как border-radius . Я установил Internet Explorer 9, так как он поддерживает свойство border-radius. Итак, просто чтобы проверить, работает ли это свойство в приложении Delphi, я создаю новый проект с Memo и TEmbeddedWB. В событии Memo1OnChange я заставляю веб-браузер загружать любой текст в заметке. Затем я ввожу в памятку следующий текст:

<div style="background-color:green;  border-style: solid; border-width: 2px;
 border-radius: 10px 10px 10px 10px; width:200px; height:200px;"></div>

И веб-браузер отображает зеленое поле, но радиусов границ нет! Затем я пытаюсь сохранить его в файл и загрузить в IE9, и радиусы границ четко видны.

Я также установил ключ реестра FEATURE_BROWSER_EMULATION в свой Project1.exe со значением 9999 и то же самое для ключа в Wow6432Node для 64-битных вещей.

Я также проверил Useragent на соответствие www.WhatsMyUserAgent.com, и он говорит, что я использую MSIE9.0.

Что-нибудь еще мне нужно сделать?

РЕДАКТИРОВАНИЕ - ИСПРАВЛЕНО: - Очевидно, мне нужен следующий метатег в моем документе:

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

person Jeff    schedule 17.07.2011    source источник
comment
Ой, черт меня побери - мне нужен был метатег.. Ненавижу, когда такое происходит, я набираю вопрос после тонны исследований и через 2 минуты нахожу решение..   -  person Jeff    schedule 17.07.2011
comment
Поэтому поместите решение в раздел ответов, чтобы оно помогло и другим людям.   -  person Rob Kennedy    schedule 17.07.2011
comment
И принять это. Мы не осуждаем это, на самом деле это поощряет сам Джефф Этвуд.   -  person Marjan Venema    schedule 17.07.2011
comment
@Rob - я боюсь это делать, потому что почти каждый раз, когда я это делал, меня минусовали ..   -  person Jeff    schedule 17.07.2011
comment
Затем люди должны прочитать blog.stackoverflow.com/2011. /07/   -  person Lars Truijens    schedule 17.07.2011
comment
@Lars @Rob @Marjan - Готово, надеюсь, сойдет.   -  person Jeff    schedule 17.07.2011
comment
Хорошее исследование и хороший ответ, Джефф, проголосовал и за ваш вопрос, и за ваш ответ, потому что это полезно для всех, кому нужно знать о каких-либо специфических функциях HTML IE9.   -  person Warren P    schedule 18.07.2011


Ответы (1)


Проблема заключалась в том, что мой HTML-код (см. OP) не включал следующее:

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

Делая это, вы можете избежать необходимости изменять реестр, так как приведенное выше заставляет веб-браузер отображать в стандартном режиме IE9. Компонент TWebbrowser по умолчанию настроен на IE7.

Я проверил это, выполнив описанное выше с модификацией реестра и без нее, и это сработало, поскольку у меня установлен IE9.

Конечно, вы можете убедиться, что приведенный выше код присутствует, только если вы создадите документ самостоятельно или найдете какой-то хитрый способ внедрить его в документ. Если вы хотите, чтобы материалы CSS3 работали на сторонних веб-сайтах, вам нужен ключ реестра (если, конечно, в их документе нет приведенного выше кода).

Это ключ реестра: HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main/FeatureControl/FEATURE_BROWSER_EMULATION. Добавьте ключ DWORD и назовите его YOURAPPNAME.exe (в моем случае Project1.exe). Задайте одно из следующих значений:

9999 (0x270F):  Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
9000 (0x2328):  Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
8888 (0x22B8):  Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.
8000 (0x1F40):  Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.
7000 (0x1B58):  Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

(из MSDN)

Поскольку я хочу принудительно использовать стандарты IE9, мое окно Regedit будет выглядеть так:

Пример

Делая это, вы сообщаете веб-браузеру внутри своего приложения, что хотите использовать стандарты IE9 (вещи CSS3 и HTML5). Теперь код в моем ОП по-прежнему не работает, хотя мы только что это сделали. Почему? Потому что мне не хватало doctype. При добавлении типа документа заработало свойство радиуса границы.

Надеюсь, это будет полезно для тех, кто еще сталкивается с той же проблемой.

person Jeff    schedule 17.07.2011
comment
@Marjan - Будем надеяться, что кто-то сможет его использовать (и даже лучше: поймите, что я имею в виду: P) - person Jeff; 17.07.2011