web-dev-qa-db-fra.com

cefsharp exécuter javascript

Je veux exécuter le code JavaScript en utilisant CefSharp dans Windows Forms, mais cela ne fonctionne pas. Le code est le suivant et le message test n'est pas affiché. Ai-je oublié quelque chose?

var browser = new ChromiumWebBrowser("http://localhost:50056/simple.aspx");
browser.Name = "Simple Page";
browser.Dock = DockStyle.Fill;            
this.Controls.Add(browser);
browser.ExecuteScriptAsync("alert('test');");
14
Pei-Chun Tsai

Vous devez attendre que le navigateur soit suffisamment chargé avant d'exécuter JavaScript. Il est tentant de commencer à essayer d'accéder au DOM dans OnFrameLoadStart, alors que le V8Context aura été créé et vous pourrez exécuter un script que le DOM n'aura pas fini de charger. Si vous devez accéder au DOM le plus tôt possible, puis abonnez-vous à DOMContentLoaded, quelques exemples d'exécution de JavaScript sont ci-dessous

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');");
  }
};
21
amaitland