如何在新进程中运行我的方法(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;
}
答案 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
进行验证,然后您应该能够使用它。