CefSharp получить результат из существующей функции Javascript

1

Я пытаюсь получить результат от существующей функции Javascript на локальной html-странице, используя CefSharp в приложении Windows Form.

Источник HTML-страницы:

<!DOCTYPE html>
<html>
<body>
<p id="demo">A Paragraph.</p>
<script>
function myFunction() {
    document.getElementById("demo").innerHTML = true;
    return 1 + 1;
}
</script>
</body>
</html>

Мой код С#:

private void ChromeBrowser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs args)
{
    if (!args.IsLoading)
    {
        string result = RunScriptParamAsync("myFunction").ToString();
    }
}

public string RunScriptParamAsync(string scriptName)
{
    string script = "";
    script = scriptName;
    //script = string.Format("(function myFunction() {{ document.getElementById('demo').innerHTML = \"{0}\"; return 1 + 1; }})();", scriptName);
    chromeBrowser.EvaluateScriptAsync(script).ContinueWith(x =>
    {
        var response = x.Result;
        if (response.Success && response.Result != null)
        {
            dynamic result = response.Result;
            return ((int)result).ToString();
        }
        else
        {
            return string.Empty;
        }
    });
    return string.Empty;
}

Если я использую закомментированную строку

//script = string.Format("(function myFunction() {{ document.getElementById('demo').innerHTML = \"{0}\"; return 1 + 1; }})();", scriptName);

тогда я получаю правильный результат (2), но идея состоит в том, чтобы использовать функцию Javascript, уже существующую на веб-странице. Точка останова внутри функции показывает это: Изображение 174551

Я также пытался

chromeBrowser.GetMainFrame().EvaluateScriptAsync(script)

но с такими же результатами.

Есть идеи?

Теги:
cefsharp

1 ответ

1
Лучший ответ

Вы получаете именно то, что просите, ссылку на функцию. Вам нужно добавить (); на самом деле выполнить функцию.

//Will return a IJavascriptCallback, which is effectively a function pointer, which is what you have asked for
await browser.EvaluateScriptAsync("myFunction"); 

//To execute the function you must append (); 
await browser.EvaluateScriptAsync("myFunction();") 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню