问题:CefSharp如何判断页面是否加载完毕。
摘要:相信C#用CefSharp做浏览器来发的应该有很多人都会有遇到这个问题。特别是要执行JavaScript的时候,涉及到跨页面的JavaScript操作。大家或多或少都会有遇到这个问题。需要去判断页面是否加载完毕。
环境:CefSharp、WPF、两段JacaScript分别对应在不同页面执行的脚本。
了解CefSharp自带的方法机制
话不多说,先上个图:
从图中可以看出其实CefSharp是自带有一个IsLoading的方法的用来判断这个页面是否加载完毕,所以大家在做的时候其实可以选择采用这个来判断,而不去是采用FrameLoadEnd这个事件,虽然这个事件看似方便,但实际上在加载一个页面的同时他可能会进来判断多次,特别是有一种情况是页面是加载完了,但页面里面的元素实际上是还未显示出来的情况,然后去执行JavaScript脚本的时候,实际上是没有效果的。相信大家也有所察觉,所以才会经常问怎么去判断页面加载完毕。
如何实际去运用它
首先他是一次性的判断,也就意味着我们如果要去判断他是否加载完毕可能得采用循环,不断的去请求他是否加载完毕。因此这个地方一定得用异步,防止线程UI卡死。下面是我的做法
解释下,首先我是写了个异步的拓展方法,我将它设定了个0.5秒的休眠,避免做太多次请求。然后在外面使用的使用只需要await下就OK啦。
综合来说可以是
Task.Run(async()=>
{
browser.ExecuteScriptAsync("第一段JS");//执行第一个页面需要执行的JS
await browser.IsLoading();//执行完JS等待第二个页面加载完毕
browser.ExecuteScriptAsync("第二段JS");//执行第二个页面需要执行的JS
});
最后
希望对大家有所帮助,还有什么问题可以在下方留言。谢谢!┭┮﹏┭┮希望不要再被移除了,这可是干货!!!!!!!