所以我想要做的是能够以2个cefsharp浏览器窗口以相同的形式同时加载2个URL 此示例图像将有助于更好地解释
我似乎无法弄清楚如何做到这一点。目前我似乎只能得到一个实例。如果我尝试运行2,我会收到此错误:
An unhandled exception of type 'System.Exception' occurred in CefSharp.Core.dll
Additional information: Cef can only be initialized once. Use Cef.IsInitialized to guard against this exception.
如果不能这样做,可以推荐另一个支持HTML5的C#浏览器吗?
public ChromiumWebBrowser Browser;
CefSettings settings = new CefSettings();
void InitBrowser()
{
settings.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2764.0 Safari/537.36";
Cef.Initialize(settings);
Browser = new ChromiumWebBrowser("about:blank");
Browser.FrameLoadEnd += OnFrameLoadEnd;
Browser.LoadingStateChanged += OnLoadingStateChanged;
Browser.FrameLoadStart += OnFrameLoadStart;
Browser.LoadError += OnLoadError;
Controls.Add(Browser);
Browser.Dock = DockStyle.Fill;
}
答案 0 :(得分:0)
每个应用程序只能初始化CEF 。
github CefSharp repository here中甚至还有一个话题。
每个应用程序只能初始化一次CEF。什么也没有变 就此而言。这就是CEF的运作方式。
虽然CEF和CefSharp的架构(它只是一个.NET 绑定在它上面)是不同的: https://bitbucket.org/chromiumembedded/cef/wiki/Architecture#markdown-header-process-considerations。 有一个常见的浏览器进程,然后生成一个渲染器 每个“窗口”或“标签”的过程。 (您可以在Windows中看到它们 任务经理)
基本上它是不可能的,甚至不是以不同的形式。
您可以使用以下代码检查是否已经有任何实例正在运行(也许您可以停止第一个,然后启动另一个,尽管在您的情况下似乎没用):
if (Cef.IsInitialized)
{
Console.WriteLine("Sorry, cannot start other instance because there's already an open browser");
}
答案 1 :(得分:0)
您可以在Form中添加几个groupBox并将“ ChromiumWebBrowser”添加到groupBox。 示例:
string url1 = "https://www.url1.com";
string url2 = "https://www.url2.com";
string url3 = "https://www.url3.com";
CefSettings settings = new CefSettings();
// Initialize cef with the provided settings
Cef.Initialize(settings);
// Create a browser component
ChromiumWebBrowser chromeBrowser1;
chromeBrowser1 = new ChromiumWebBrowser(url1);
// Add it to the form and fill it to the form window.
groupBox1.Controls.Add(chromeBrowser1);
chromeBrowser1.Dock = DockStyle.Fill;
ChromiumWebBrowser chromeBrowser2;
chromeBrowser2 = new ChromiumWebBrowser(url2);
groupBox2.Controls.Add(chromeBrowser2);
chromeBrowser2.Dock = DockStyle.Fill;
ChromiumWebBrowser chromeBrowser3;
chromeBrowser3 = new ChromiumWebBrowser(url3);
groupBox3.Controls.Add(chromeBrowser3);
chromeBrowser3.Dock = DockStyle.Fill;