1、使用CefSharp常见错误
1) 下载CefSharp master zip code文件编译报错
下载地址:https://codeload.github.com/cefsharp/CefSharp/zip/master
原因:可能由于编译路径存在中文导致。
2) 无法创建新的堆栈防护页面
可能是由于 进程“CefSharp.BrowserSubprocess.exe”
没有正常结束掉,一直占用内存增加。
3) 结束浏览器后,CefSharp.BrowserSubprocess.exe
进行无法结束
需要确保,创建浏览器的线程和调用Cef.ShutDown();的线程确保在同一个线程中进行操作。 如果是主线程创建。关闭程序后BrowserSubprocess进程可以直接退出。 如果是非主线程,需要在创建浏览器,即:把浏览器绑定到控件的线程,调用shutdown方法。
2、获取 Javascript(js)方法返回的结果
如果需要获取返回值的代码,使用 Task<JavascriptResponse> EvaluateScriptAsync(string script, TimeSpan? timeout)
方法。 JavaScript代码是异步执行的,因此使用.NET Task 类返回一个响应,其中包含错误消息,结果和一个成功(bool)标志。
/ Get Document Height
var task = frame.EvaluateScriptAsync("(function() { var body = document.body, html = document.documentElement; return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); })();", null);
task.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message;
}
}, TaskScheduler.FromCurrentSynchronizationContext());
或者
browser.LoadingStateChanged += OnLoadingStateChanged; //A very basic example private void OnLoadingStateChanged(object sender, LoadingStateChangedEventArgs args) { //Wait for the Page to finish loading if (args.IsLoading == false) { //Reccomended to use an anon closure const string script = @"(function() { return 1 + 1; })();"; browser.EvaluateScriptAsync(script).ContinueWith(x => { var response = x.Result; if (response.Success && response.Result != null) { var onePlusOne = (int)response.Result; //Do something here (To interact with the UI you must call BeginInvoke) } }); } }
Notes
1) 脚本是在 Frame 级别执行,永远页面至少有一个Frame( MainFrame )
2) 只能返回一般的值(如int,bool,string等) - 不能返回自己定义的复杂(用户定义)类型。因为不能将随机的JavaScript对象暴露给.NET ,至少现在还不能,但可以将要返回到.NET代码的Javascript对象转换为JSON对象,使用 JSON.toStringify()
方法转化为JSON字符串,并将该字符串返回到您的.NET代码。然后,可以将该字符串反序化(JSON.NET).NET对象。有关更多信息,请参阅此MSDN链接。 (https://msdn.microsoft.com/library/cc836459(v=vs.94).aspx)
相关文档:
https://github.com/cefsharp/CefSharp/wiki/Quick-Start
.Net(C#) cefsharp Chrome 浏览器控件后台执行Iframe中的Js代码的方法
.NET(C#) cefsharp 设置浏览器默认语言和userAgent及示例代码
.NET(C#) CefSharp CommandLine开关参数配置和读取网页源代码方法及示例代码
.NET(C#) CefSharp 下载获取页面中指定的文件图片视频等内容(.jpg、.js等)