2017-04-18 161 views
0

私はC#の初心者であり、Cefsharp + javascriptを学んでいますので、必要と思われるソリューションをコメントしてください。私はページが私のコードを実行するCefsharpとロードが終了するまで待機しようとしてるcefsharpがページを読み込むのを待つ、winforms C#

は、私は解決策は思った

...他のstackoverflowの質問/ githubのが、ノー外出先で見つかったいくつかのソリューションを試してみました"NavStateChanged"のC#エラーが発生しました: "ChromiumWebBrowserに 'NavStateChanged'の定義が含まれていません。

誰かが正しい方向に向いていますか、スニペットをスローすることはできますか?私はあなたに私のために全部を書くように求めていませんが、私は本当にここで失われています、私はC#、Cefsharp & javascriptを一斉に学習しています...その圧倒的です。

これは私が見つけたコードのオンラインソリューションを探していながら、それはまた、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

同じことを思って誰のために私はしました:はい、彼らは時代遅れです、リンク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');"); 
    } 
}; 
関連する問題