avant tout, je suis novice en C # et j'apprends Cefsharp + javascript au fur et à mesure, alors essayez de commenter toute solution que vous jugez nécessaire, cela m'évitera de poser des questions stupides.
J'essaie d'attendre la fin du chargement de la page avec Cefsharp pour exécuter mon code, j'ai essayé plusieurs solutions trouvées sur d'autres questions stackoverflow/github, mais non.
Je pensais que la solution était "NavStateChanged" mais je reçois une erreur C # de: "ChromiumWebBrowser ne contient pas de définition pour 'NavStateChanged'"
Quelqu'un pourrait-il me pointer dans la bonne direction ou me lancer un extrait de code? Je ne vous demande pas d'écrire le tout pour moi mais je suis vraiment perdu ici, j'apprends C #, Cefsharp & javascript tout à la fois et bien ... c'est écrasant.
C'est le code que j'ai trouvé en cherchant une solution en ligne, il correspond aussi à beaucoup de références github mais ne semble pas fonctionner: /
EventHandler<NavStateChangedEventArgs> handler = null;
handler = (sender, args) = > {
//TODO : show a loading gif until the page load completes
//Wait for while page to finish loading not just the first frame
if (!args.IsLoading)
{
chromeBrowser.NavStateChanged -= handler;
MessageBox.Show("The page has completed loading", "Load completed",
MessageBoxButtons.OK);
//TODO : once load complete show the actual page
}
Pour tous ceux qui se demandent la même chose que moi: oui ils sont dépassés, merci pour le lien amaitland!
https://github.com/cefsharp/CefSharp/wiki/General-Usage#handlers
Ceux-ci semblent être les trois états de chargement corrects qui m'intéressaient:
browser.RenderProcessMessageHandler = new RenderProcessMessageHandler();
public class RenderProcessMessageHandler : IRenderProcessMessageHandler
{
// Wait for the underlying `Javascript Context` to be created, this is only called for the main frame.
// If the page has no javascript, no context will be created.
void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
const string script = "document.addEventListener('DOMContentLoaded', function(){ alert('DomLoaded'); });";
frame.ExecuteJavaScriptAsync(script);
}
}
//Wait for the page to finish loading (all resources will have been loaded, rendering is likely still happening)
browser.LoadingStateChanged += (sender, args) =>
{
//Wait for the Page to finish loading
if (args.IsLoading == false)
{
browser.ExecuteJavaScriptAsync("alert('All Resources Have Loaded');");
}
}
//Wait for the MainFrame to finish loading
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if(args.Frame.IsMain)
{
args.Frame.ExecuteJavaScriptAsync("alert('MainFrame finished loading');");
}
};