CEFSHARP是否支持JavaScript的承诺?
下面的JavaScript代码在浏览器的控制台中工作。 但是,当我将此代码放在CEFSHARP中时,CEFSHARP返回null。 我正在使用CEFSHARP 100.0.120-pre。 CEFSHARP 100.0.0.120-PRE是否支持JavaScript的承诺?
(function()
{
var a = document.querySelector('#dle-content > div.section > ul > li:nth-child(3)');
a.scrollIntoView();
document.querySelector('#dle-content > div.section > ul > li:nth-child(3)').click();
var returnArray = new Array();
function wait(selector) {
return new Promise((resolve) => {
const listener = () => {
const node = document.querySelector(selector);
if (node) {
document.removeEventListener('DOMNodeInserted', listener);
resolve(node);
}
};
document.addEventListener('DOMNodeInserted', listener);
});
}
wait('.cdn_download_item')
.then(()=>
{
var elements = Array.from(document.querySelectorAll('.cdn_download_item span:first-child'));
var linksArray = new Array();
for (element of elements)
{
linksArray.push(element.innerText);
}
returnArray=console.log(linksArray);
})
return returnArray;
})();
这就是我在CEFSHARP中使用JavaScript代码的方式 请检查我的代码为什么CEFSHARP返回NULL
JavaScript + CEFSHARP + C#
string jsScript = @"
(function()
{
var returnArray = new Array();
function wait(selector) {
return new Promise((resolve) => {
const listener = () => {
const node = document.querySelector(selector);
if (node) {
document.removeEventListener('DOMNodeInserted', listener);
resolve(node);
}
};
document.addEventListener('DOMNodeInserted', listener);
});
}
wait('.cdn_download_item')
.then(()=>
{
var elements = Array.from(document.querySelectorAll('.cdn_download_item span:first-child'));
var linksArray = new Array();
for (element of elements)
{
linksArray.push(element.innerText);
}
returnArray=console.log(linksArray);
})
return returnArray;
})();
";
var task = chrome.EvaluateScriptAsync(jsScript5);
await task.ContinueWith(x =>
{
if (!x.IsFaulted)
{
var response = x.Result;
if (response.Success == true)
{
var final = (List<object>)response.Result;
foreach (var el in final)
{
textHtml.Text += el.ToString() + Environment.NewLine;
}
}
}
}, TaskScheduler.FromCurrentSynchronizationContext());
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,诺言得到了支持。而不是评估criptationsync,您需要使用estunuatesscriptAspromiseasync
evaluatesscriptasaspromisync不同于evaluescriptasync略有不同,因为您必须返回一个值的值才能正确等待的承诺。
参见 https://github.com/cefsharp/cefsharp/wiki/wiki/general-usage#2-how-do-do-do-you-call-a-a-javascript-method-method-method-that-that-that-that-that-that-returns-that-that-that-that-returns-a-a-result 有关其他示例。
Yes, promises are supported. Instead of EvaluateScriptAsync you need to use EvaluateScriptAsPromiseAsync
EvaluateScriptAsPromiseAsync differs from EvaluateScriptAsync slightly in that you must return a value for the promise to be awaited correctly.
See https://github.com/cefsharp/CefSharp/wiki/General-Usage#2-how-do-you-call-a-javascript-method-that-returns-a-result for additional examples.