2016-03-30 15 views
0

Wie kann ich meine Methode (LoadUrl) in einem neuen Prozess ausführen. Das Problem ist, dass CefSharp (https://cefsharp.github.io) nur einmal initialisiert wird, und ich Ex nicht reinitialisieren kann. "User-Agent" auf die folgende Anfrage.C# CefSharp im neuen Prozess

Ich habe versucht, dies in neuen Thread, aber es stürzt ab, wenn ich Cef.Initialize() nach Cef.ShutDown() versuchen.

Gibt es eine Möglichkeit, CefSharp jedes Mal mit einer neuen Befehlszeile zu starten?

Mein Code:

public void LoadUrl() 
{ 
    Cef.Initialize(InitializeCef()); 
    CefSharp.OffScreen.ChromiumWebBrowser browser = new CefSharp.OffScreen.ChromiumWebBrowser("", BrowserSettings()); 
    string URL = "http://localhost:3180/"; 

    browser.Size = new System.Drawing.Size(800, 600); 
    browser.LoadError += (BrowserLoadError); 
    browser.JsDialogHandler = new JsDialogHandler(); 
    browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(browser_FrameLoadEnd); 
    while (!browser.IsBrowserInitialized) 
    { 
     Console.WriteLine("Initializing browser..."); 
    } 
    browser.Load(URL); 

    browser.Dispose(); 
    Cef.Shutdown(); 
} 
private BrowserSettings UniBrowserSettings() 
{ 
    BrowserSettings settings = new BrowserSettings(); 
    settings.DefaultEncoding = "UTF-8"; 
    settings.JavascriptAccessClipboard = CefState.Disabled; 
    settings.JavascriptOpenWindows = CefState.Disabled; 
    settings.JavascriptCloseWindows = CefState.Disabled; 
    settings.JavascriptDomPaste = CefState.Disabled; 
    settings.OffScreenTransparentBackground = true; 

    return settings; 
} 


private static CefSettings InitializeCef() 
{ 
    CefSettings settings = new CefSettings(); 
    settings.UserAgent = DateTime.Now + DateTime.Now.ToString() + " myBrowser " + Cef.CefSharpVersion; 
    return settings; 
} 

Antwort

0

CefSharp wird einmal initialisiert werden und soweit ich weiß, Sie können nicht neu initialisieren es nach dem Herunterfahren. Ich bin mir nicht sicher, warum der Benutzeragent nicht festgelegt werden kann, da es so aussieht, als wäre UserAgent eine Eigenschaft, die in CefSettings.h gespeichert ist, und Chrome kann während der Ausführung Benutzeragenten wechseln.

Sie können stattdessen ein anderes Projekt in Ihrem Projekt erstellen, das einen Benutzeragenten als Befehlszeilenargument verwendet. Dieser Prozess würde dann Ihren Browser erstellen, die Arbeit erledigen und beenden. Etwas wie folgt aus:

class Program 
    { 
     static void Main(string[] args) 
     { 
      if(args.Length > 0 && !String.isNullOrEmpty(args[0]); 
       Cef.Initialize(new CefSettings() { UserAgent = args[0] }); 
     } 
    } 

Sie würden wahrscheinlich auch die URL als Parameter übergeben, die Sie Uri.TryCreate mit bestätigen konnte, und Sie sollten in der Lage sein, mit dem zu arbeiten.

+0

Es ist eine "Chromium" -Begrenzung, siehe https://bitbucket.org/chromembedded/cef/issues/421#comment-16410312 – amaitland

+0

@amaitland Ich dachte, dass so viel für die tatsächliche Initialisierung von CefSharp, aber warum sollte es nicht sein möglich, den UserAgent zu ändern, sobald Cef initialisiert wurde? Es scheint, als gäbe es einen Getter und Setter für das Eigentumsrecht? ** edit ** merke ich was ich in der Post geschrieben habe, bearbeite das aber jetzt noch neugierig auf den UserAgent – Matt

+0

Aber ich möchte nicht nur senden sondern auch Daten empfangen. Wie - Verbindungsfehler ... usw. –