使用谷歌浏览器内核控件DCEF3拦截弹出的新页面到新标签页
2017-05-20 15:03
253 查看
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(),消息发出后立即返回,并不堵塞。
经过如此改造后大功告成。
对于构造多标签页浏览器,我们的应用逻辑是在事件处理函数中取得url参数,重新new一个TChromium放置在新标签页,但这样做有问题,总是卡住然后崩溃,网上能够搜到的信息不多,唯一有用的是这篇文章:http://www.cnblogs.com/newrainsoftware/p/5535222.html
文章就是一些代码,按这个做还是会卡住崩溃。从代码中可以知道解决问题的思路,即不能在事件函数中立即new一个新的TChromium,那篇文章的解决办法是在事件处理函数中发个消息给主窗口,在主窗口中再来new TChromium。仔细看他使用的是win32函数SendMessage(),这个函数需要等目标窗口接收并处理了这个消息才会返回,和在事件处理函数中立即处理并没有区别。因此,需要将这个函数改为PostMessage(),消息发出后立即返回,并不堵塞。
经过如此改造后大功告成。
相关文章推荐
- 在winform中使用webbrowser控件时,不弹出新的页面,只在当前窗口打开
- 弹出框页面中使用jquery.validate验证控件
- HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
- 页面使用Ajax控件,后台不能调用前台Javascript脚本弹出消息框的解决办法
- (转载)HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
- 一步步学习SPD2010--第十四章节--在Web页面使用控件(1)--处理功能区和标签属性任务窗格
- 使用标签控件设计多页面窗口
- jquery 触发a标签点击事件,弹出页面;不被浏览器屏蔽拦截的打开窗口的方法
- AngularJS页面【uib-dropdown】控件在模态窗口(弹出窗)中无法使用问题
- C# winform使用webbrowser控件,不弹出新的页面,只在当前窗口打开
- 一步步学习SPD2010--第十四章节--在Web页面使用控件(1)--处理功能区和标签属性任务窗格
- HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
- 使用标签控件设计多页面窗口
- 弹出框页面中使用jquery.validate验证控件
- 基于asp.net的web页面动态控件创建以及使用
- 用VB将第三方控件打成CAB包(在WEB页面上使用)
- 使用IE WebControls中的TabStrip控件和MultiPage控件实现选项卡式风格页面
- 在 ASP.NET 页面中使用 TreeView 控件
- 使用Server.Transfer来传递页面中的控件
- Apache中如何使用ErrorDocument标签设定统一的错误页面