在 XNA 中使用 Awesomium 检测 onClick
detecting onClick with Awesomium in XNA
我正在使用 Awesomium 为 XNA 框架游戏构建菜单系统。菜单是可见的,并且 mouseState 事件已成功注入我的 webView(有一些 CSS 翻转的东西在工作)。但是当在我的菜单按钮中触发 onClick 事件时,我似乎无法在我的 C# 代码中执行方法。
C#
private void OnViewProcessCreated(object sender, EventArgs e)
{
JSObject menu = webView.CreateGlobalJavascriptObject("menu");
if (menu == null)
return;
using (menu)
menu.BindAsync("onButtonClick", myJSMethodHandler);
}
private void myJSMethodHandler(object sender, JavascriptMethodEventArgs e)
{
if (e.MethodName == "onButtonClick")
{
WebCore.Shutdown();
}
}
JS/HTML
<!DOCTYPE html>
<html>
<head>
<title>Main UI</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script>
{
object.onclick = menu.onButtonClick;
}
</script>
</head>
<body>
<div class="d1">
<p><h1 class="button1" id="b1" onclick="menu.onButtonClick();">Agents</h1></p>
<p><h1 class="button1" id="b2" onclick="">Research</h1></p>
<p><h1 class="button1" id="b3" onclick="">Infrastructure</h1></p>
<p><h1 class="button1" id="b4" onclick="">Financial</h1></p>
</div>
</body>
</html>
去除了不必要的JS函数,直接从element中调用绑定函数。
<!DOCTYPE html>
<html>
<head>
<title>Main UI</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="d1">
<p><h1 class="button1" id="b1" onclick="menu.onButtonClick();">Agents</h1></p>
<p><h1 class="button1" id="b2" onclick="">Research</h1></p>
<p><h1 class="button1" id="b3" onclick="">Infrastructure</h1></p>
<p><h1 class="button1" id="b4" onclick="">Financial</h1></p>
</div>
</body>
</html>
还意识到永远不会调用 OnViewProcessCreated 函数,不知道为什么。在主要的 Awesomium 函数中创建了一个 JSObject,它 运行 很好。
public AwesomiumMenu(string Source, Microsoft.Xna.Framework.Rectangle rectangle)
{
// CSS styling
const string SCROLLBAR_CSS = "::-webkit-scrollbar { visibility: hidden; }";
WebCore.Initialize(new WebConfig()
{
CustomCSS = SCROLLBAR_CSS
});
webView = WebCore.CreateWebView(rectangle.Width, rectangle.Height);
webView.ReduceMemoryUsage();
webView.Source = Source.ToUri();
webView.IsTransparent = true;
while (webView.IsLoading)
WebCore.Update();
Rectangle = rectangle;
JSObject menu = webView.CreateGlobalJavascriptObject("menu");
menu.BindAsync("onButtonClick", myJSMethodHandler);
}
我正在使用 Awesomium 为 XNA 框架游戏构建菜单系统。菜单是可见的,并且 mouseState 事件已成功注入我的 webView(有一些 CSS 翻转的东西在工作)。但是当在我的菜单按钮中触发 onClick 事件时,我似乎无法在我的 C# 代码中执行方法。
C#
private void OnViewProcessCreated(object sender, EventArgs e)
{
JSObject menu = webView.CreateGlobalJavascriptObject("menu");
if (menu == null)
return;
using (menu)
menu.BindAsync("onButtonClick", myJSMethodHandler);
}
private void myJSMethodHandler(object sender, JavascriptMethodEventArgs e)
{
if (e.MethodName == "onButtonClick")
{
WebCore.Shutdown();
}
}
JS/HTML
<!DOCTYPE html>
<html>
<head>
<title>Main UI</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script>
{
object.onclick = menu.onButtonClick;
}
</script>
</head>
<body>
<div class="d1">
<p><h1 class="button1" id="b1" onclick="menu.onButtonClick();">Agents</h1></p>
<p><h1 class="button1" id="b2" onclick="">Research</h1></p>
<p><h1 class="button1" id="b3" onclick="">Infrastructure</h1></p>
<p><h1 class="button1" id="b4" onclick="">Financial</h1></p>
</div>
</body>
</html>
去除了不必要的JS函数,直接从element中调用绑定函数。
<!DOCTYPE html>
<html>
<head>
<title>Main UI</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="d1">
<p><h1 class="button1" id="b1" onclick="menu.onButtonClick();">Agents</h1></p>
<p><h1 class="button1" id="b2" onclick="">Research</h1></p>
<p><h1 class="button1" id="b3" onclick="">Infrastructure</h1></p>
<p><h1 class="button1" id="b4" onclick="">Financial</h1></p>
</div>
</body>
</html>
还意识到永远不会调用 OnViewProcessCreated 函数,不知道为什么。在主要的 Awesomium 函数中创建了一个 JSObject,它 运行 很好。
public AwesomiumMenu(string Source, Microsoft.Xna.Framework.Rectangle rectangle)
{
// CSS styling
const string SCROLLBAR_CSS = "::-webkit-scrollbar { visibility: hidden; }";
WebCore.Initialize(new WebConfig()
{
CustomCSS = SCROLLBAR_CSS
});
webView = WebCore.CreateWebView(rectangle.Width, rectangle.Height);
webView.ReduceMemoryUsage();
webView.Source = Source.ToUri();
webView.IsTransparent = true;
while (webView.IsLoading)
WebCore.Update();
Rectangle = rectangle;
JSObject menu = webView.CreateGlobalJavascriptObject("menu");
menu.BindAsync("onButtonClick", myJSMethodHandler);
}