Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这是一个跳转到newtab的窗口。二次弹出的问题_C#_Cefsharp - Fatal编程技术网

C# 这是一个跳转到newtab的窗口。二次弹出的问题

C# 这是一个跳转到newtab的窗口。二次弹出的问题,c#,cefsharp,C#,Cefsharp,我正在制作一个只加载一个网页的程序。用户无法访问任何其他网页,此windows窗体是全屏的,没有边界 我设法用windows窗体和cefsharp制作了一个,但现在我遇到了不同的问题。当我尝试登录时,此特定网站会显示新的弹出窗口。通常在chrome上,它只会打开另一个标签,但在这里,它不会创建新标签,而是打开新的弹出窗口。所以我编写了如下代码将弹出窗口直接指向newtab,但它只为第一个选项卡页面中的第一个弹出窗口创建新选项卡 例如,第1页打开弹出窗口,然后此代码获取该弹出窗口并创建选项卡第2页

我正在制作一个只加载一个网页的程序。用户无法访问任何其他网页,此windows窗体是全屏的,没有边界

我设法用windows窗体和cefsharp制作了一个,但现在我遇到了不同的问题。当我尝试登录时,此特定网站会显示新的弹出窗口。通常在chrome上,它只会打开另一个标签,但在这里,它不会创建新标签,而是打开新的弹出窗口。所以我编写了如下代码将弹出窗口直接指向newtab,但它只为第一个选项卡页面中的第一个弹出窗口创建新选项卡

例如,第1页打开弹出窗口,然后此代码获取该弹出窗口并创建选项卡第2页。在这一点之前,它工作正常,但如果tabPage2中有弹出窗口,它只会打开弹出窗口,而不是创建新的选项卡

我该如何解决这个问题?请帮帮我。。我认为它只是在为tabPage1中的弹出窗口创建新的选项卡,而无论它从tabPage2中获得什么弹出窗口,它都不会打开新选项卡。有没有办法解决这个问题

我正在visual studio 2017 winform上进行此操作,cefsharp版本67.0.0

主类

private void initialize_browser()
    {
        try
        {
            CefSettings settings = new CefSettings();
            Cef.Initialize(settings);

            //main browser
            chromeBrowser = new ChromiumWebBrowser("url");
            LifespanHandler life = new LifespanHandler();
            chromeBrowser.LifeSpanHandler = life;
            life.popup_request += life_popup_request;
            this.tabPage1.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill; 
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error in initializing the browser. Error: " + ex.Message);
        }
    }



    private void life_popup_request(string popup_request)
    {
        this.Invoke((MethodInvoker)delegate ()
        {
            string title = "TabPage " + (tabControl1.TabCount + 1).ToString();
            TabPage myTabPage = new TabPage(title);
            tabControl1.TabPages.Add(myTabPage);
            tabControl1.SelectTab(tabControl1.TabCount - 1);
            ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser(popup_request);
            chromeBrowser.Parent = myTabPage;
            chromeBrowser.Dock = DockStyle.Fill;
        });
    }
LifespanHandler类

 public class LifespanHandler : ILifeSpanHandler
    {
        //event that receive url popup
        public event Action<string> popup_request;

        bool ILifeSpanHandler.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)
        {
            //get url popup
            if (this.popup_request != null)
                this.popup_request(targetUrl);

            //stop open popup
            newBrowser = null;
            return true;
        }


        bool ILifeSpanHandler.DoClose(IWebBrowser browserControl, IBrowser browser)
        { return false; }


        void ILifeSpanHandler.OnBeforeClose(IWebBrowser browserControl, IBrowser browser) { }


        void ILifeSpanHandler.OnAfterCreated(IWebBrowser browserControl, IBrowser browser) { }
    }
public类LifespanHandler:ILifeSpanHandler
{
//接收url弹出窗口的事件
公共事件行动请求;
bool ILifeSpanHandler.OnBeforePopup(IWebBrowser浏览器控件、IBrowser浏览器、IFrame框架、字符串targetUrl、字符串targetFrameName、WindowOpenDisposition targetDisposition、bool用户手势、IPopupFeatures popupFeatures、IWindowInfo windowInfo、IBrowser设置浏览器设置、ref bool noJavascriptAccess、out IWebBrowser newBrowser)
{
//获取url弹出窗口
if(this.popup_请求!=null)
此.popup_请求(targetUrl);
//停止打开弹出窗口
newBrowser=null;
返回true;
}
bool ILifeSpanHandler.DoClose(IWebBrowser浏览器控件,IBrowser浏览器)
{返回false;}
void ILifeSpanHandler.OnBeforeClose(IWebBrowser浏览器控件,IBrowser浏览器){}
void ILifeSpanHandler.OnAfterCreated(IWebBrowser浏览器控件,IBrowser浏览器){}
}

我和你一样有麻烦,所以我把它修好了

  • 您应该将变量Life声明为全局变量 LifespanHandler life=新的LifespanHandler()

  • 在life_弹出_请求函数中添加:chromeBrowser.LifeSpanHandler=life

    私有无效生命弹出请求(字符串弹出请求) { this.Invoke((MethodInvoker)委托() { string title=“TabPage”+(tabControl1.TabCount+1).ToString()

    }

  • 祝你好运

         TabPage myTabPage = new TabPage(title);
    
         tabControl1.TabPages.Add(myTabPage);
    
         tabControl1.SelectTab(tabControl1.TabCount - 1);
    
         ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser(popup_request);
    
         chromeBrowser.LifeSpanHandler = life; 
    
         chromeBrowser.Parent = myTabPage;
    
         chromeBrowser.Dock = DockStyle.Fill;
     });