我真的是新的CefSharps铬浏览器,并有困难弄清楚如何获得一个jquery AJAX 请求的结果。
我的第一个尝试是将我 AJAX 请求传递给EvaluateScriptAsync
。事实上,这个脚本工作正常。它完全按照我的要求做了,但是我没有得到任何结果/状态代码,因为我的Cef-Task没有等到AJAX完成它的工作。
下面举一个例子(只是一个示例代码):
var tasks = pdBrowser.EvaluateScriptAsync(@"
(function(){
$.ajax({
type: ""POST"",
dataType: ""json"",
cache: false,
url: ""_resources/php/ajaxRequests.php"",
async: false,
data: {
action: ""insertCrossPlatform"",
type: """",
values: JSON.stringify(""foo bar"")
},
success: function(response) {
if (typeof response === 'string' && response.substring(0, 5) == ""ERROR"")
{
return response;
}
else
{
//pageReload();
return ""OK"";
}
},
error: function(xhr, textStatus, errorThrown) {
return errorThrown + ""\n"" + xhr.responseText;
},
complete: function() {
return ""COMPLETE"";
}
});
})();", null);
tasks.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
if (response.Success)
{
if (response.Result != null)
{
MessageBox.Show(response.Result.ToString());
}
}
else
{
MessageBox.Show(response.Message, "Ein Fehler ist aufgetreten", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}, TaskScheduler.Default);
后来我读到有一个SchemeHandler,但我不太明白如何实现它。有人能帮我吗?
先谢谢你。
3条答案
按热度按时间pxyaymoc1#
首先,
SchemeHandler
不太可能适用于此场景,您通常会在提供响应时实现SchemeHandler
。大多数人选择绑定一个对象,并在希望与父应用程序通信时调用其绑定对象上的方法。有关示例,请参阅
FAQ
。https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#3-how-do-you-expose-a-net-class-to-javascript使用
49.0.0
,您可以实现ResponseFilter
来访问底层的响应缓冲区,它很复杂,而且没有很好的文档记录,所以如果您不喜欢挖掘参考C++
代码,那么这个选项不适合您。https://github.com/cefsharp/CefSharp/blob/cefsharp/49/CefSharp.Example/Filters/PassThruResponseFilter.cs#L17wa7juj8i2#
我所做的是通过javascript在页面上创建一个元素,它的ID是对 AJAX 调用的响应,例如,当你进行ajax调用时,为ajax调用分配一个ID。
当 AJAX 调用返回时,在页面上写一个带有预先分配的id和回调信息的元素,然后你可以使用cefsharp从页面上读取元素内容,这将是你的回调信息。
后来和 AJAX 在一起
然后从cefsharp中读取c#中的texarea
函数()...$(文本区域信息).value).Result
7tofc5zh3#
您可以使用PostMessage javascript方法通知.NET应用程序:
下面是无头浏览器的.NET代码示例: