如何使用Awesomium将JavaScript结果返回到c#
本文关键字:返回 结果 JavaScript 何使用 Awesomium | 更新日期: 2023-09-27 18:14:03
我创建了一个新的WPF项目,并添加了一个Awesomium 1.6.3 WebControl。
然后,我将此代码添加到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());
}
(包含Newtonsoft可能是有利的。)