新流程中的C#CefSharp

时间:2016-03-30 19:10:30

标签: c# wpf cefsharp

如何在新进程中运行我的方法(LoadUrl)。 问题是CefSharp(https://cefsharp.github.io)只初始化一次,我不能重新初始化ex。 "用户代理"根据以下要求。

我尝试在新主题中启动此操作,但在Cef.Initialize()之后尝试Cef.ShutDown()时崩溃了。

有没有办法每次使用新的命令行启动CefSharp?

我的代码:

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;
}

1 个答案:

答案 0 :(得分:0)

CefSharp被设计为初始化一次,据我所知,你不能在关闭后重新初始化它。我不确定为什么无法设置用户代理,因为看起来UserAgent是CefSettings.h中存储的属性,Chrome可以在运行时切换用户代理。

您可以做的是在您的内部创建另一个项目,将用户代理作为命令行参数。然后,该过程将创建您的浏览器,完成工作并退出。像这样:

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

您也可以将网址作为参数传递,您可以使用Uri.TryCreate进行验证,然后您应该能够使用它。