检测在CefSharp中单击的锚链接

时间:2015-08-19 08:17:17

标签: winforms cefsharp

我试图陷阱"控制+点击"在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)时,会发生两件事:

  1. 如果链接与当前加载的链接或其他网址中的锚链接相同,则确实会调用OnBeforeBrowse并且它会正常工作(在我的网页中打开一个新窗口)情况)。
  2. 如果该链接是指向同一网址但不同锚点的锚点链接,则不会发出OnBeforeBrowse,因此我无法通过该方式控制加载。
  3. 我尝试使用OnBeforeResourceLoad,但TransitionTypeLinkClicked对于它在ajax调用期间加载的任何资源(和GET),我只是不能找到OnBeforeResourceLoad的参数与实际点击的链接以及其他加载的资源有所不同。

    关于如何实现这一目标的任何想法?

    PS:没有试图让这个问题成为" XY问题",实际问题(尽管问题的标题)我试图解决的是,就像我说的那样,打开新标签/按住ctrl +点击(或中间点击)的窗口,所以如果有任何其他方法可以做到这一点,那也可以。

1 个答案:

答案 0 :(得分:1)

在获得Alex Maitland(CefSharp&#39的主要撰稿人)对此问题的回复之后,似乎在最新的Cef(和CefSharp)中添加了对此的回调,现在最新的CefSharp的主人分支。

答案是在OnOpenUrlFromTab上使用IRequestHandler(我使用的版本无法使用)并检查WindowOpenDisposition