我正在尝试通过使用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](https://istack.dev59.com/M8SOg.webp)
我也尝试过……
chromeBrowser.GetMainFrame().EvaluateScriptAsync(script)
但是结果相同。有什么想法吗?