Delphi Webbrowser и CSS3 - PullRequest
       9

Delphi Webbrowser и CSS3

5 голосов
/ 17 июля 2011

Мое приложение загружает некоторый 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" />

1 Ответ

12 голосов
/ 17 июля 2011

Проблема заключалась в том, что мой 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 будет выглядеть так:

Example

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

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

...