使用谷歌浏览器内核控件DCEF3拦截弹出的新页面到新标签页

DCEF3控件TChromium有个事件OnBeforePopup,我们可以在这个事件函数里加上自己的逻辑,最后一个参数是返回参数bool &Result,置为true表示自己来处理,置为false表示使用默认行为,即弹出一个新的窗口。


对于构造多标签页浏览器,我们的应用逻辑是在事件处理函数中取得url参数,重新new一个TChromium放置在新标签页,但这样做有问题,总是卡住然后崩溃,网上能够搜到的信息不多,唯一有用的是这篇文章:http://www.cnblogs.com/newrainsoftware/p/5535222.html

文章就是一些代码,按这个做还是会卡住崩溃。从代码中可以知道解决问题的思路,即不能在事件函数中立即new一个新的TChromium,那篇文章的解决办法是在事件处理函数中发个消息给主窗口,在主窗口中再来new TChromium。仔细看他使用的是win32函数SendMessage(),这个函数需要等目标窗口接收并处理了这个消息才会返回,和在事件处理函数中立即处理并没有区别。因此,需要将这个函数改为PostMessage(),消息发出后立即返回,并不堵塞。


经过如此改造后大功告成。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值