加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 如何处理CefSharp中的弹出链接

发布时间:2020-12-17 00:04:41 所属栏目:大数据 来源:网络整理
导读:我正在使用CefSharp 39.0.2创建一个标签式Web浏览器.现在,如果用户点击网站上的链接,它将打开一个没有我原始UI的新窗口.例如,当您点击Google新闻上的文章链接时,它会在新窗口中打开,但没有我编写的任何浏览控件.我也查看了Cef.WinForms.Example程序,它也做了
我正在使用CefSharp 39.0.2创建一个标签式Web浏览器.现在,如果用户点击网站上的链接,它将打开一个没有我原始UI的新窗口.例如,当您点击Google新闻上的文章链接时,它会在新窗口中打开,但没有我编写的任何浏览控件.我也查看了Cef.WinForms.Example程序,它也做了同样的事情.

是否有可能以不同的方式处理这个问题?我希望链接可以在新选项卡中打开,也可以在新窗口中打开(包含所有控件).我一直在查看GitHub问题,我找不到这样的东西(也许我看起来不够努力,因为我认为这也是其他人想做的事情……).我查看了浏览器控件的所有事件,但我找不到任何看起来像是处理它的事件.

ChromiumWebBrowser具有LifeSpanHandler属性.要在Cefsharp中手动控制弹出窗口,您必须实现自己的生命周期处理程序对象,以实现ILifeSpanHandle接口.

每次浏览器想要打开一个新窗口时,它都会调用你的生命周期处理程序的OnBeforePopup函数.在这里,您可以实现所需的行为.如果返回false,浏览器将弹出一个新窗口.如果您返回true,浏览器将忽略弹出操作,但您可以手动创建新窗口,新选项卡等…

这是定制寿命处理的一个非常简单的例子.在弹出请求中,它会触发一个名为PopupRequest的事件.您可以订阅此类事件并手动创建新窗口/选项卡.然后,它返回true,指示ChromiumWebBrowser不要创建自己的新窗口.但是,您需要自己使用另一个ChromiumWebBrowser实现创建新窗口.

public class SampleLifeSpanHandler: ILifeSpanHandler
{
    public event Action<string> PopupRequest;

    public bool OnBeforePopup(IWebBrowser browser,string sourceUrl,string targetUrl,ref int x,ref int y,ref int width,ref int height)
    {
        if (PopupRequest != null)
            PopupRequest(targetUrl);

        return true;
    }

    public void OnBeforeClose(IWebBrowser browser)
    {

    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读