2017-01-21 5 views
0

두 개의 cefsharp 인스턴스 중 하나에서 RegisterJsObject를 사용하여 웹 사이트 URL을로드하려고합니다. URL은 웹 사이트 (chromeBrowser1)에서 수신되지만 창 (chromeBrowser2)은 업데이트되지 않습니다. 가능한 한 많이 스크립트를 문서화하여 이해하는 것이 더 쉽습니다. 나는 C#의 일반적인 지식을 가진 사람이 내 문제를 발견 할 것이라고 확신한다. 해결책을 찾기 위해 수 시간을 소비하지만 나는 할 수 없다.CefSharp에서 웹 사이트를로드 할 수 없습니다.

 private void Form1_Load(object sender, EventArgs e) 
    { 
     CefSettings settings = new CefSettings(); 
     Cef.Initialize(settings); 

     chromeBrowser2 = new ChromiumWebBrowser("http://google.com") // Initializate Browser 2 FIRST (This is the instance we want to update every X seconds using chromeBrowser2.Load("http://somewebsite.com"); later on) 
     { 
      Dock = DockStyle.Fill, 

     }; 
     splitContainer1.Panel2.Controls.Add(chromeBrowser2); 



     chromeBrowser1 = new ChromiumWebBrowser("http://127.0.0.1/") // Initializate Browser 1 - Main website - source of data and more 
     { 
      Dock = DockStyle.Fill, 

     }; 
     splitContainer1.Panel1.Controls.Add(chromeBrowser1); 
     chromeBrowser1.RegisterJsObject("callbackObj", new CallbackObjectForJs()); /// the link is obtained from here - See picture 
    } 

    public class CallbackObjectForJs 
    { 
     private readonly static BackgroundWorker backgroundWorker1 = new BackgroundWorker(); 
     private readonly static ChromiumWebBrowser chromeBrowser2 = new ChromiumWebBrowser("http://facebook.com"); 
     // IF I REMOVE ANY OF THE ABOVE I WILL RECEIVE THE FOLLOWING ERROR : 
     // Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.backgroundWorker1' 
     // Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.chromeBrowser2' 
     public void showMessage(string msg) 
     { 

      var sitelink = msg; 

      Console.WriteLine(sitelink); // WORKING - link is visible on console but chromeBrowser 2 is not update, still reads http://google.com 
      Console.WriteLine("Loading site using one of the options below"); // Can be seen on console + 

      // AT THIS POINT chromeBrowser2 SHOULD LOAD THE NEW URL /// 

      chromeBrowser2.Load(sitelink); // NOT WORKING 
      Console.WriteLine("Check Point 1"); 
      backgroundWorker1.RunWorkerAsync(sitelink); // NOT WORKING 
      Console.WriteLine("Check Point 2"); 


     } 

    }  

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) // NOT WORKING 
    { 

     Console.WriteLine("Background Worker"); // Nothing 
     string link = (string)e.Argument; 
     Console.WriteLine("Check Point 3"); 
     chromeBrowser2.Load(link); 
     Console.WriteLine("Check Point 5"); 
     Console.WriteLine(link); 
     Console.WriteLine("Check Point 6"); 

    } 

This is what the console shows 콘솔 결과.

나는 무엇인가의 이유로 내가 선택한 옵션 중 어느 것도 트리거되지 않는다는 것을 이해합니다. 나는 그것들을 정적으로 만드는 것으로 숨길 수 있었던 Error CS0120 때문에 높은 추측을하고있다. 그러나 그것은 꽤 많이있다. 나는 아이디어가 없어. 검색 결과가 나에게이 사실을 알렸다.

+1

Chromium 브라우저 개체에서 Address 속성을 설정해 보았습니까? –

+0

솔직히 말해서 나는 그게 무슨 뜻인지 모르겠다. 기본 URL을 설정했다면 그랬습니다. 또한 전체 스크립트입니다. 내가 한 모든 것이 바로 거기에있다. – rgerculy

+0

나는 지금 무슨 뜻인지 안다. ChromiumWebBrowser.Address 속성. 아니, 나는하지 않았다. 하지만 뭔가를 드러내는 지 알아보기 위해 지금 할 것입니다. – rgerculy

답변

0

ReSharper를 설치했는데 1 분 안에 문제가 발견되었습니다. 내가해야 할 일은 정적 인 chromeBrowser2을 만드는 것입니다.

public partial class Form1 : Form 
    { 

    public ChromiumWebBrowser chromeBrowser1; 
    public *static* ChromiumWebBrowser chromeBrowser2; 
    .... 

입력 해 주셔서 감사합니다.

+1

등록 된 클래스의 생성자에 참조를 전달하여 인스턴스가 정적으로 작동하도록해야합니다. 이는 모범 사례와는 거리가 있습니다. – amaitland

+0

나는 그것을 조사 할 것이다. 그러나 그 적용은 꽤 많이있다. 다른 작업은 없습니다. 그 외 모든 것은 PHP로 처리됩니다. – rgerculy