2017-04-18 3 views
0

우선 C#에서 초보자이며 Cefsharp + javascript를 배우므로 필요한 솔루션을 언급하려고 시도해보십시오. 어리석은 질문을 묻지 않습니다. 내가 페이지를 내 코드를 실행 Cefsharp으로 로딩이 완료 될 때까지 기다려야 시도하고있어cefsharp가 페이지를로드 할 때까지 기다리십시오. C#

, 나는 내가 솔루션이라고 생각

... 다른 유래 질문/github에 있지만 이동 중에 발견 몇 가지 솔루션을 시도 "NavStateChanged"하지만 C# 오류가 발생했습니다. "ChromiumWebBrowser에 'NavStateChanged'에 대한 정의가 없습니다.

올바른 방향으로 나를 가리켜 주거나 스 니펫을 던질 수 있습니까? 나는 당신이 나를 위해 모든 것을 써달라고 요청하는 것이 아니라, 진정으로 여기에서 잃어버린, C#, Cefsharp & 자바 스크립트를 한꺼번에 잘 배우는 것 ... 그 압도적 인.

온라인 솔루션을 찾고있는 동안 내가 찾은 코드, 그것은 또한 GitHub의 참조를 많이 일치하지만, 작동하지 않는 것 :/

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 
      } 
+0

그 예는 유효 기간이 있습니다. https://github.com/cefsharp/CefSharp/wiki/General-Usage#handlers을 읽으십시오. – amaitland

답변

2

같은 일 I 궁금 다른 사람을 위해 않았다 : 예 그들은 구식입니다, 링크 amaitland 주셔서 감사합니다!

https://github.com/cefsharp/CefSharp/wiki/General-Usage#handlers

나에게 관련 있었다 3 개 정확한로드 상태로 나타납니다

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');"); 
    } 
}; 
관련 문제