如何更改 TChromium 组件的默认背景颜色?

Posted

技术标签:

【中文标题】如何更改 TChromium 组件的默认背景颜色?【英文标题】:How to change default background color for TChromium component? 【发布时间】:2012-01-28 13:40:59 【问题描述】:

我使用TChromium。我分配了AWebPageAsString,这是一个灰色背景的静态 html 页面。

FBrowser := TChromium.Create(pnlHolder);
FBrowser.Visible := false;
FBrowser.Parent := TWinControl(pnlHolder);
FBrowser.Align := alClient;
FBrowser.OnBeforeBrowse := BrowserBeforeBrowse;
FBrowser.HandleNeeded;
FBrowser.FontOptions.RemoteFontsDisabled := true;
FBrowser.Browser.MainFrame.LoadString(AWebPageAsString, 'navigate:webpage');

当我启动应用程序时,它首先显示为白色背景和空白内容,然后我的页面显示为灰色背景和实际内容。

有没有办法避免这种情况?也许有默认的背景颜色?

【问题讨论】:

为什么不加载隐藏浏览器的页面,加载完成后才显示? 可能是因为 Chrome 引擎就是这样做的。当我将 Chrome 浏览器最小化一段时间后,将其恢复并导航到另一个选项卡时,它会以完全白色的背景显示,并且在显示之前的页面之前没有任何内容。 "为什么不加载隐藏浏览器的页面,加载完成后才显示?" - 使用 Visibility 属性和 OnLoadEnd 尝试过这种方式,但行为仍然相同。 试过 1. 使浏览器默认不可见 2. 处理 OnLoadStart 并使 FBrowser.Visible := true;不幸的是 OnLoadStart 甚至没有被解雇。 【参考方案1】:

我知道这个答案很晚,但这至少是一个有趣的话题。要更改默认浏览器的背景颜色,您可以使用自定义样式表。听起来不错,但它有一个很大的弱点——当你导航到一个页面时,例如未定义样式表,将应用您的自定义样式表。但是如果你知道你会浏览例如只有您的页面采用某种样式,这甚至可能是一种优势,因为您可以保留在该默认自定义样式中定义的样式定义。

所以要创建一个黑色背景的浏览器(使用下面描述的样式),您可以使用以下代码:

procedure TForm1.FormCreate(Sender: TObject);
const
  CSSHeader = 'data:text/css;charset=utf-8;base64,';
  CSSBase64 = 'Ym9keSB7YmFja2dyb3VuZC1jb2xvcjpibGFjazt9';
begin
  Chromium1.UserStyleSheetLocation := CSSHeader + CSSBase64;
  Chromium1.Options.UserStyleSheetEnabled := True;
  Chromium1.ReCreateBrowser('about:blank');
end;

上述代码中使用的CSSBase64常量为如下样式表encoded to Base64

body background-color:black;

【讨论】:

像魅力一样工作。我只用了 2 年的时间来实施它。 :)

以上是关于如何更改 TChromium 组件的默认背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何从反应中的子组件内部更改父组件的背景颜色,盖茨比

如何更改导航栏的默认背景颜色? [复制]

如何在反应js中更改按钮onClick的背景颜色?

更改角度日期选择器材质组件的颜色

如何在 android 中更改默认的 toast 消息颜色和背景颜色?

如何从默认的白色更改 DatePicker 对话框的背景颜色?