C# 在CEFSharp中处理OnBeforePopUp时如何设置新浏览器的框架名称
我在使用WinForms编写的自定义浏览器中使用某个特定站点时遇到问题。据我所知,他们正在使用javascript“window.open”方法打开一个URL,并为新窗口指定一个特定的名称。我认为问题在于我的弹出窗口实现不允许他们保留对新窗口的引用 我已经实现了一个ILifeSpanHandler,正在处理OnBeforePopup方法。我可以通过“targetFrameName”参数看到它们的名称,但我不知道如何将其分配给我正在创建的新IWebBrowser。任何帮助都将不胜感激 以下是我的代码的相关部分:C# 在CEFSharp中处理OnBeforePopUp时如何设置新浏览器的框架名称,c#,winforms,cefsharp,C#,Winforms,Cefsharp,我在使用WinForms编写的自定义浏览器中使用某个特定站点时遇到问题。据我所知,他们正在使用javascript“window.open”方法打开一个URL,并为新窗口指定一个特定的名称。我认为问题在于我的弹出窗口实现不允许他们保留对新窗口的引用 我已经实现了一个ILifeSpanHandler,正在处理OnBeforePopup方法。我可以通过“targetFrameName”参数看到它们的名称,但我不知道如何将其分配给我正在创建的新IWebBrowser。任何帮助都将不胜感激 以下是我的代
public class LifeSpanHandler : ILifeSpanHandler
{
MainForm mainForm;
public LifeSpanHandler(MainForm form)
{
mainForm = form;
}
public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
newBrowser = mainForm.AddNewBrowserTab(targetUrl);
//how to add the targetFrameName parameter to this newBrowser?
return true;
}
您告诉CEF不要创建新窗口,然后获取URL并将其加载到手动创建的另一个浏览器实例中。您需要做的是将CEF创建的新浏览器实例路由到TabControl中的主机控件
newBrowser = null;
var control = mainForm.AddNewBrowserTab(targetUrl);
var rect = control.ClientRectangle;
control.Invoke(new Action(() => windowInfo.SetAsChild(control.Handle, rect.Left, rect.Top, rect.Right, rect.Bottom)));
return false;
返回false让CEF创建窗口非常重要
public Control AddNewTab2()
{
Control hostControl = new Control { Dock = DockStyle.Fill };
TabPage tab = new TabPage();
tab.Controls.Add(hostControl);
this.tabControl1.Invoke(new Action(() => { this.tabControl1.Controls.Add(tab); }));
return hostControl;
}