在 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);
    }