Пытаюсь возвратить значение JS функции на странице, загруженной в CEF браузере, используя метод EvaluateScriptAsync. Посетил десятки веб-страниц и документаций, однако работы скрипта добиться так и не смог. При отладке значение response всегда null.
Отрывок кода программы:
private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
{
//Wait for the Page to finish loading
if (args.IsLoading == false)
{
const string script = @"(function()
{
alert(123);
return 1 + 1;
})();";
chromeBrowser.EvaluateScriptAsync(script).ContinueWith(x =>
{
var response = x.Result;
if (response.Result != null)
{
var onePlusOne = response.Result;
val = (string)onePlusOne.ToString();
chromeBrowser.ExecuteScriptAsync("alert('" + val + "')"); // тут скрипт возвращает алерт в браузере со значением 2, это значит что js скрипт полностью корректен
all.Add(val);
}
});
}
}
Каким образом все-таки верно записать полученное значение в переменную, или, например, в коллекцию C#?
Так здесь, похоже, сам скрипт виноват. Нужно обернуть в функцию, и чтобы был return.
Насчет самого вызова, я вот так делал (да, синхронно, но все равно же все эти операции не вызывать в UI-потоке):
public object EvalJS(string code)
{
var task = cwb.GetBrowser().MainFrame.EvaluateScriptAsync(code);
task.Wait();
if (task.Result.Success)
{
return task.Result.Result;
}
else
{
throw new CefJsException(task.Result.Message); // CefJsException - это мой собственный класс, можете заменить Exception просто
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Доброго времени сутокДопустим хочу сделать простую нейросеть для XOR:
Я чочу чтобы fan[0] и fan[1] вращалис независимы друг другаrot[0] и rot[1] панелы на которых расположыны fan[0] и fan[1]