这周没什么时间,一开始就在忙一些CefSharp的事情,Win10的研究就放了下来,CefSharp的资料挺少的,但好在是开源的,能够咱们便宜的折腾。由于两个的内容都很少,我就合成一篇文章啦。html
这还里还要吐嘈一下WinForm,也多是WPF玩的年头长了,以为WinForm真TNND的难用呀,弄几个定义的控件,至关之麻烦。浏览器
回归正文。url
由于新版本中接口发生了变化,该文章只适用于39.0.0.1。spa
1、禁用右键菜单线程
禁用右键菜单实际上是很容易的。主就要是实现一个接口 IMenuHandler,这个接口有一个 OnBeforeContextMenu的方法,咱们在这里让返回一个false,右键菜单就消失了。code
internal class MenuHandler : IMenuHandler { public bool OnBeforeContextMenu(IWebBrowser browser, IContextMenuParams parameters) { return false; } }
再将这个对像的实例赋给ChromiumWebBrowser对象的MenuHandler属性上就OK啦。orm
var browser = new ChromiumWebBrowser(url); browser.MenuHandler = new MenuHandler();
2、控制弹出窗口的方式htm
在CefSharp,若是打开一个网页,若是这网页要在新窗口开打,他真的会弹出一个新的窗口,可是这个窗口并不受个人们控制,好比,咱们要强制在当前浏览器显示、咱们要在一个TabControl的标签中显示,咱们要一个本身风格的窗口。并且在WPF中,弹出的居然是一个Form的窗口,WPF的同窗是否是感到深深的内伤。对象
控制弹出窗口有到的接口:ILifeSpanHandler,blog
方法两个:OnBeforeClose,OnBeforePopup
控件弹出窗口主要是用到了 OnBeforePopup,它也有一个Boolean的返回值,当这个值为true的时候,CefSharp就不本身弹出窗口了,在这里,咱们就能够偷偷的作本身的事情了。
internal class LifeSpanHandler : ILifeSpanHandler { public void OnBeforeClose(IWebBrowser browser) { } public bool OnBeforePopup(IWebBrowser browser, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width, ref int height) {
//在这里,能够作你想作的事情哦 return true; } }
再将这个对像的实例赋给LifeSpanHandler属性上就OK啦。
var browser = new ChromiumWebBrowser(url); browser.LifeSpanHandler = new LifeSpanHandler();
注:在接口的这个方法触发时,并不在STA线程,若是要对UI有操做的话,要回到UI线程。