如何使用Awesomium将JavaScript结果返回到C#?

如何使用Awesomium将JavaScript结果返回到C#?,c#,awesomium,C#,Awesomium,我创建了一个新的WPF项目,并在其中添加了一个 然后,我将此代码添加到MainWindow.xaml.cs: private void webControl1_Loaded(object sender, RoutedEventArgs e) { webControl1.LoadURL("https://www.google.com/"); } private void webControl1_DomReady(object sender, Eve

我创建了一个新的WPF项目,并在其中添加了一个

然后,我将此代码添加到
MainWindow.xaml.cs

    private void webControl1_Loaded(object sender, RoutedEventArgs e)
    {
        webControl1.LoadURL("https://www.google.com/");
    }

    private void webControl1_DomReady(object sender, EventArgs e)
    {
        var wc = new WebClient();
        webControl1.ExecuteJavascript(jQuery);
        webControl1.ExecuteJavascript(@"var __jq = jQuery.noConflict();");
        webControl1.ExecuteJavascript(@"alert(__jq);");
        using(var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return 1; })();"))
        {
            MessageBox.Show(result.ToString());
        }
        //using (var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return __jq('a'); })();"))
        //{
        //    MessageBox.Show(result.ToString());
        //}
    }
它会提醒“1”和“function(a,b){…}”,现在我想起来,这是不正常的,但不管怎样,这是另一个问题

一旦我取消注释底部代码,它就会警告“1”,然后挂起。为什么?我怎样才能在一个页面上找到一些关于链接的信息?或者可靠地将一些信息传递回C#?或者使用C#访问DOM


编辑:
jQuery
只是一个包含jQuery 1.7代码的字符串。

关于以下行挂起的原因:

webControl1.ExecuteJavascriptWithResult(@"(function() { return __jq('a'); })();")

这是因为
ExecuteJavascriptWithResult
只能返回基本的Javascript类型(字符串、数字、布尔值、数组或用户创建的对象)。您试图返回无法映射到其中一种类型的本机DOM元素对象,因此请求失败。

返回复杂对象的简单方法是使用
JSON.stringify()
将其转换为字符串,然后在C#托管代码中重新解析

例如:

JSValue rawToken = browser.ExecuteJavascriptWithResult(@"JSON.stringify(someTokenObjectHere);");
if (rawToken.IsString)
{
    // For generic objects:
    JObject payload = JObject.Parse(rawToken.ToString());
    // For typed objects:
    MyCustomTokenObject payload = JsonConvert.DeserializeObject<MyCustomTokenObject>(rawToken.ToString());
}
JSValue rawToken=browser.ExecuteJavascriptWithResult(@“JSON.stringify(someTokenObjectHere);”);
if(rawToken.IsString)
{
//对于一般对象:
JObject payload=JObject.Parse(rawToken.ToString());
//对于类型化对象:
MyCustomTokenObject负载=JsonConvert.DeserializeObject(rawToken.ToString());
}

(包含序列化内容可能会有好处。)

如果它抛出一个异常并至少给出一个解释,那就太好了。我想我仍然可以选择我想要的属性,并将它们作为字符串返回。谢谢你的帮助!另外,用户创建的对象是什么,它与jQuery对象有何不同?这是一个bug,它应该立即返回null。我将把它添加到待办事项列表中。用户创建的对象是由脚本在运行时创建的任何对象。一个DOM元素对象(如由代码>文档.GETELMENTYBIDI/CODE >或由jQuery选择器函数包装的)由系统创建,实际上是一个围绕本地对象的瘦包装器(它以C++为单位,不能复制)。事实上,它包含本机对象。明白了!