2015-02-13 16 views
5

Sono nuovo a CefSharp Ho creato un progetto di libreria di classi e ho fatto riferimento alla libreria CefSharp per eseguire il rendering del browser Web, tuttavia sto affrontando alcuni problemi che mostrano il browser web. Si prega di trovare il codice esattoIl browser Web CefSharp WPF non viene visualizzato o reso

WebBrowser_test1:

public partial class ChildWidget : Window 
    { 
     public CefSharp.Wpf.ChromiumWebBrowser webView; 
     public Widget() 
     { 
      InitializeComponent(); 
      CefSharp.CefSettings settings = new CefSharp.CefSettings(); 
      settings.PackLoadingDisabled = true; 
      if (CefSharp.Cef.Initialize(settings)) 
      { 
       webView = new CefSharp.Wpf.ChromiumWebBrowser(); 
       main_grid.Children.Add(webView); 
       webView.Address = "http://www.google.co.uk"; 
      } 
     } 
    } 

e sto riferimento a questa libreria (DLL) in un altro progetto

public MainWindow() 
     { 
      InitializeComponent(); 
      Button newbutton = new Button(); 
      newbutton.Width = 50; 
      main_grid.Children.Add(newbutton); 
      newbutton.Click += ButtonClick; 
     } 

     private void ButtonClick(object sender, RoutedEventArgs e) 
     { 
      try 
      { 
       Webbrowser_test1.ChildWidget childWidget = new Widget(); 
       childWidget.Show(); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 
      } 

Ora sul pulsante CLICK io aprirò il (WebBrowser_test1) bambino widget in cui mostrerò il browser Web. Quando la finestra si apre è vuota.

Per favore fatemi sapere se ho mancare nulla

risposta

0

Hai provato sostituendo

webView.Address = "http://www.google.co.uk"; 

con

webView.Load("http://www.google.co.uk"); 
+0

Sì, ho provato con webView.Load ("http://www.google.co.uk"); Ma ancora non ho potuto ottenere questo fatto. –

+0

Beh, in generale funziona assolutamente, e cefsharp è meraviglioso, quindi penso che sia il 'controllo' un po 'esotico in un uso' controllo 'che stai cercando. Il mio istinto dice che è un problema a vita.Mi sconsiglia di chiamare Load (come dici tu stai chiamando) nel costruttore di controlli. Devi lasciare che CEF carichi la DLL (~ 20Mb) in memoria prima e intializzi. C'è un evento IsBrowserInitialised che può esserci d'aiuto. Vorrei anche consigliare la creazione di un nuovo progetto, senza usare i controlli, che semplicemente carica e CEFSharp e visualizza una pagina web per familiarizzare con cef. – penderi

0

Mi vengono in mente i primi tre potenziali problemi. Ma è difficile dire che cosa il vero problema è dal codice da solo come si allontana un po 'fuori dagli esempi ufficiali

  1. Sposta Cef.Initialize() al vostro MainWindow costruttore. Dovrebbe essere chiamato solo una volta per avviare il processo di rendering CefSharp.BrowserSubprocess.exe.

  2. Vedere la risposta a CefSharp 3 always failing Cef.Initialize() per alcune cose da verificare sui file binari e sul loro posizionamento. In realtà, l'approccio consigliato è quello di iniziare ad avere l'esempio WPF nel repository CefSharp.MinimalExample in esecuzione prima e quindi adattarlo al caso d'uso da lì.

  3. Non sono sicuro che un ChromiumWebBrowser() senza impostare esplicitamente una larghezza e altezza funziona. Una finestra 0x0 potrebbe non ricevere alcun contenuto renderizzato. Non ho provato con il codice recente.

0

Come jornh menziona, potrebbe essere necessario impostare in modo esplicito l'altezza e la larghezza della ChromiumWebBrowser. Se non si conoscono le dimensioni esatte, probabilmente anche l'impostazione HorizontalAlignment e VerticalAlignment a Stretch (per riempire il contenitore padre) funzionerà.

Avete controllato se lo Cef.Initialize() restituisce effettivamente true? Potresti mancare alcuni file e CefSharp non sempre fornisce messaggi di errore chiari quando questo è il caso.

0

Iscriviti a IsBrowserInitializedChanged dopo aver creato un ChromiumWebBrowser. Quindi, una volta che il browser è inizializzato, puoi chiamare Load e il tuo controllo verrà visualizzato.

... 
    _browser = new ChromiumWebBrowser(); 
    mainGrid.Children.Add(_browser); 
    _browser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged; 
... 

void OnIsBrowserInitializedChanged(object sender, DependencyPropertyChangedEventArgs e) 
{ 
    if (_browser.IsBrowserInitialized) 
    { 
     _browser.Load("https://www.google.com/"); 
    } 
}