我试图陷阱"控制+点击"在CefSharp winforms客户端应用程序中打开新窗口/选项卡。
最明显的方法是在OnBeforeBrowse
上使用IRequestHandler
,所以我做了类似这样的事情(实际的功能更复杂,但没关系):
public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
{
if (Control.ModifierKeys.HasFlag(Keys.Control) && request.TransitionType == TransitionType.LinkClicked)
{
MainForm.OpenChildWindow(new Uri(request.Url));
return true;
}
return false;
}
这绝对适用于"普通"链接点击。但是当你点击一个锚链接(通过javascript或其他任何方式加载一些AJAX)时,会发生两件事:
OnBeforeBrowse
并且它会正常工作(在我的网页中打开一个新窗口)情况)。OnBeforeBrowse
,因此我无法通过该方式控制加载。我尝试使用OnBeforeResourceLoad
,但TransitionType
是LinkClicked
对于它在ajax调用期间加载的任何资源(和GET
),我只是不能找到OnBeforeResourceLoad
的参数与实际点击的链接以及其他加载的资源有所不同。
关于如何实现这一目标的任何想法?
PS:没有试图让这个问题成为" XY问题",实际问题(尽管问题的标题)我试图解决的是,就像我说的那样,打开新标签/按住ctrl +点击(或中间点击)的窗口,所以如果有任何其他方法可以做到这一点,那也可以。
答案 0 :(得分:1)
在获得Alex Maitland(CefSharp&#39的主要撰稿人)对此问题的回复之后,似乎在最新的Cef(和CefSharp)中添加了对此的回调,现在最新的CefSharp的主人分支。
答案是在OnOpenUrlFromTab
上使用IRequestHandler
(我使用的版本无法使用)并检查WindowOpenDisposition
。