我正在使用 Awesomium 1.6.5 来呈现我的应用程序的大部分用户界面,并注意到 CSS 加载中的一些不一致。第一次打开窗口时,CSS 将正常运行并加载样式。
然而,过了那一点,样式是否适用似乎是随机的。左侧的窗口显示样式正常运行,右侧的窗口显示样式失败。
由于这些按钮是 jQuery UI(1.10.1 和 jQuery 1.9.1),我的第一个想法是创建这些按钮的 JavaScript 没有被执行,所以我将它从页面的 HTML 内部移动到应用程序,确保在用户看到页面之前执行 JavaScript。
这没有任何区别,问题仍然存在。
所有 CSS(我的样式表和 jQuery UI 的样式表)在WebCore
初始化时通过加载WebCoreConfig.CustomCSS
,然后传递给WebCore
. 正在呈现的页面在其 HTML 中确实有一些样式(使用<style>
标签)。
设置窗口类是一个单例,它处理实际 WPF 窗口的实例化和管理,每次SettingsWindow.Show()
调用该方法时,都会关闭 WPF 窗口的先前实例(与 Awesomium 一起WebControl
)并创建一个新实例。创建此实例后,将执行相应的 JavaScript。这是Initialise()
功能:
// Host is an instance of AwesomiumHost, a WPF window containing an Awesomium
// WebControl control.
public static void Initialise()
{
if (Host != null)
{
Host.webControl.Close();
Host.Close();
}
Host = new AwesomiumHost(Resources.Markup.SettingsPage)
{
Width = 810,
Height = 640,
Title = "Settings"
};
var webControl = Host.webControl;
webControl.ExecuteJavascript(Markup.jQuery);
webControl.ExecuteJavascript(Markup.Cufon);
webControl.ExecuteJavascript(Markup.CufonOpenSans);
webControl.ExecuteJavascript(
"Cufon.replace('.title, .section-hdr', { "
+ "color: '-linear-gradient(#555, #222)'"
+ " }); "
+ "Cufon.replace('.text');"
);
webControl.ExecuteJavascript("$(function() {"
+ "$( '#host-choice' ).buttonset();"
+ "$( '#backup-choice' ).buttonset();"
+ "});");
webControl.ExecuteJavascript(
"Cufon.replace('.title', { "
+ "color: '-linear-gradient(#555, #222)'"
+ " }); "
+ "Cufon.replace('.text');"
);
webControl.ExecuteJavascript(@"
$(function() {
$( '#host-choice' ).buttonset(); // Where jQuery should create the buttons
$( '#backup-choice' ).buttonset();
});");
webControl.LoadCompleted += (s, e) =>
webControl.ExecuteJavascript(
"$('#x').click();");
// Sets the state of the "No" button (shown in image) to "pressed."
}
所以我问,为什么按钮加载不一致,可以做些什么来解决这个问题?