首页 .Net .NET(C#) CefSharp 执行JS(JavaScript)代码及资源清理方法

.NET(C#) CefSharp 执行JS(JavaScript)代码及资源清理方法

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#)cefsharpChrome 浏览器控件后台执行Iframe中的Js代码的方法

.NET(C#)cefsharp设置浏览器默认语言和userAgent及示例代码

.NET(C#) CefSharp CommandLine开关参数配置和读取网页源代码方法及示例代码

.NET(C#) CefSharp 下载获取页面中指定的文件图片视频等内容(.jpg、.js等)

.NET(C#) CefSharp 处理设置读取网站页面请求中的Cookie

.NET(C#) CefSharp 执行JS(JavaScript)代码及资源清理方法

特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。