如何在CefSharp中获取JavaScript的字符串输出?
问题排查与解决方案
你的代码存在几个问题,导致无法正确获取并显示JavaScript执行结果:
1. 错误的String.Format用法
你当前的String.Format("output", response)不会把response的值插入到字符串中,应该使用占位符{0}来指定输出位置:
MessageBox.Show(String.Format("output: {0}", response));
2. 未正确处理JavaScriptResponse对象
EvaluateScriptAsync返回的task.Result是JavaScriptResponse类型,它包含Success(执行是否成功)和Result(执行结果)两个核心属性。你需要先判断执行是否成功,再获取结果:
var task = chromiumWebBrowser1.EvaluateScriptAsync("2+2"); var response = task.Result; if (response.Success) { MessageBox.Show(String.Format("output: {0}", response.Result)); } else { MessageBox.Show("脚本执行失败: " + response.Message); }
3. 确保脚本在页面加载完成后执行
如果在页面尚未加载完成时调用EvaluateScriptAsync,会导致脚本无法正常执行,返回空结果。你应该在FrameLoadEnd事件中执行脚本,确保页面DOM已就绪:
// 先注册FrameLoadEnd事件 chromiumWebBrowser1.FrameLoadEnd += ChromiumWebBrowser1_FrameLoadEnd; // 事件处理方法 private void ChromiumWebBrowser1_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { // 确保是主框架加载完成 if (e.Frame.IsMain) { var task = e.Frame.EvaluateScriptAsync("2+2"); var response = task.Result; if (response.Success) { MessageBox.Show(String.Format("output: {0}", response.Result)); } else { MessageBox.Show("脚本执行失败: " + response.Message); } } }
按照以上步骤修改后,就能正确获取2+2的执行结果4并显示出来。
内容的提问来源于stack exchange,提问作者user20360581
相关产品推荐
相关产品推荐

