Возврат значения из JS функции в CefSharp.Wpf

421
22 октября 2017, 19:14

Пытаюсь возвратить значение 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#?

Answer 1

Так здесь, похоже, сам скрипт виноват. Нужно обернуть в функцию, и чтобы был 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 просто
    }
}
READ ALSO
Задача на многопоточность [требует правки]

Задача на многопоточность [требует правки]

В институте задали задачу по с#Не могу решить ее:

418
Удаление пользователя ASP.NET Identity

Удаление пользователя ASP.NET Identity

Пытаюсь удалить пользователя:

280
Создание простой нейросети

Создание простой нейросети

Доброго времени сутокДопустим хочу сделать простую нейросеть для XOR:

428
Проблема с Unity (Input.GetTouch(0).phase and Input.GetTouch (1).phase)

Проблема с Unity (Input.GetTouch(0).phase and Input.GetTouch (1).phase)

Я чочу чтобы fan[0] и fan[1] вращалис независимы друг другаrot[0] и rot[1] панелы на которых расположыны fan[0] и fan[1]

296