【问题标题】:Delphi Webbrowser and CSS3Delphi 网页浏览器和 CSS3
【发布时间】:2011-07-18 01:54:00
【问题描述】:

我的应用程序将一些 HTML 加载到 Web 浏览器中(TEmbeddedWB 来自 bsalsa.com),我想使用一些 CSS3 功能,例如 border-radius。我安装了 Internet Explorer 9,因为它支持 border-radius 属性。好的,只是为了测试该属性是否在 Delphi 应用程序中工作,我创建了一个带有备忘录和 TEmbeddedWB 的新项目。在Memo1OnChange 事件中,我让Webbrowser 加载备忘录中的任何文本。然后我在备忘录中输入以下文本:

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

浏览器显示绿色框,但没有边框半径!然后我尝试将它保存到一个文件中,并在 IE9 中加载它,并且边框半径清晰可见。

我还为我的 Project1.exe 设置了注册表键 FEATURE_BROWSER_EMULATION,其值为 9999,对于 64 位内容,Wow6432Node 中的键也是如此。

我还对照www.WhatsMyUserAgent.com 检查了用户代理,它说我正在运行 MSIE9.0

我还有什么需要做的吗?

编辑 - 已修复: - 显然我的文档中需要以下元标记:

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

【问题讨论】:

  • 噢,搞砸了——我需要元标记。我讨厌这种情况发生,经过大量研究后我输入了一个问题,2 分钟后我找到了解决方案。
  • 所以将解决方案放在“答案”部分,这样它也可以帮助其他人。
  • 接受它。我们并不反对这一点,事实上,杰夫·阿特伍德本人也鼓励这样做。
  • @Rob - 我害怕这样做,因为几乎每次我这样做时,我都被否决了..
  • 那么人们应该阅读blog.stackoverflow.com/2011/07/…

标签: delphi css webbrowser-control internet-explorer-9


【解决方案1】:

问题在于 我的 HTML 代码(参见 OP)不包含以下内容:

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

通过这样做,您可以避免修改注册表,因为上面强制 Web 浏览器以 IE9 标准模式呈现。 TWebbrowser 组件默认设置为 IE7。

我通过在修改注册表和不修改注册表的情况下执行上述操作进行了测试,并且自从我安装了 IE9 后它就可以正常工作。

当然,如果您自己创建文档,或者找到一些偷偷摸摸的方法将其注入到文档中,您只能确保上述代码存在。如果你想让 CSS3 东西在 3rd 方网站上运行,那么你需要注册表项(当然,除非他们的文档中有上述代码)。

这是注册表项: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 窗口将如下所示:

这样做,您就是在告诉应用程序中的 Web 浏览器您要使用 IE9 标准(CSS3 和 HTML5 标准)。 现在,我的 OP 中的代码仍然不起作用,即使我们刚刚这样做了。为什么?因为我错过了doctype。通过添加 doctype,边框半径属性起作用了。

希望这对面临同样问题的其他人有所帮助。

【讨论】:

  • @Marjan - 希望有人可以使用它(甚至更好:理解我的意思:P)
猜你喜欢
  • 2012-01-07
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多