CefSharp如何从现有的Javascript函数中获取结果?

6

我正在尝试通过使用CefSharp在Windows Form应用程序中获取本地HTML页面上现有的JavaScript函数结果。

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>

我的C#代码是:

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函数。

在该函数内设置断点会显示如下信息:

enter image description here

我也尝试过……

chromeBrowser.GetMainFrame().EvaluateScriptAsync(script)
但是结果相同。有什么想法吗?
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5
你得到的正是你所要求的,一个对函数的引用。你需要添加();来实际执行该函数。
//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();") 


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,