Jef*_*eff 5 delphi webbrowser-control css3 internet-explorer-9
我的应用程序将一些HTML加载到Webbrowser(来自bsalsa.com的TEmbeddedWB),我想使用一些CSS3功能border-radius.我安装了Internet Explorer 9,因为它支持该border-radius属性.好的,只是为了测试该属性是否在Delphi应用程序中运行,我创建了一个带有Memo和TEmbeddedWB的新项目.在Memo1OnChange事件中,我让web浏览器加载任何文本是在备忘录.然后我在备忘录中输入以下文字:
<div style="background-color:green; border-style: solid; border-width: 2px;
border-radius: 10px 10px 10px 10px; width:200px; height:200px;"></div>
Run Code Online (Sandbox Code Playgroud)
webbrowser显示绿色框,但没有border-radii!然后我尝试将其保存到文件中,并在IE9中加载它,并且border-radii清晰可见.
我还FEATURE_BROWSER_EMULATION为我的Project1.exe 设置了注册表项,值为9999 Wow6432Node,对于64位内容的密钥也是如此.
我还检查了针对www.WhatsMyUserAgent.com的Useragent,它说我正在运行MSIE9.0
还有什么我需要做的吗?
编辑 - 修复: - 显然我需要在我的文档中使用以下Metatag:
<meta http-equiv="X-UA-Compatible" content="IE=9" />
Run Code Online (Sandbox Code Playgroud)
Jef*_*eff 12
问题是我的 HTML代码(参见OP)不包括以下内容:
<meta http-equiv="X-UA-Compatible" content="IE=9" />
Run Code Online (Sandbox Code Playgroud)
通过这样做,您可以避免必须修改注册表,因为上面强制Webbrowser在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.
Run Code Online (Sandbox Code Playgroud)
(来自MSDN)
由于我想强制使用IE9标准,我的Regedit窗口将如下所示:

通过这样做,您告诉您的应用程序中的Webbrowser您要使用IE9标准(CSS3和HTML5的东西).现在,我的OP中的代码仍然无效,即使我们刚刚这样做了.为什么?因为我错过了一个doctype.通过添加doctype,边界半径属性起作用.
希望这对其他人面临同样问题很有帮助.