检测在 CefSharp 中单击的锚 link
Detect anchor link clicked in CefSharp
我试图诱使 "Control+Click" 在 CefSharp winforms 客户端应用程序中打开新的 windows/tabs。
最明显的方法是在 IRequestHandler
上使用 OnBeforeBrowse
,所以我做了这样的事情(实际功能更复杂,但不要紧):
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;
}
这绝对适用于 "normal" link 点击。但是当你点击锚点 link(通过 javascript 或其他方式加载一些 AJAX 时),会发生两件事:
- 如果 link 与当前加载的相同或不同 URL 中的锚点 link 相同,它确实会调用
OnBeforeBrowse
并且它'我会正常工作(在我的例子中打开一个新的 window)。
- 如果link是同一个URL但不同锚点的锚点link,则不会发出
OnBeforeBrowse
,所以我无法控制加载通过那条路。
我尝试使用 OnBeforeResourceLoad
,但是 TransitionType
对于它在 ajax 调用(和 GET
)期间加载的任何资源都是 LinkClicked
并且我只是在实际点击的 link 和加载的其余资源的 OnBeforeResourceLoad
的参数中找不到任何不同之处。
关于如何实现这一点有什么想法吗?
PS:我并不想把它变成 "XY problem",我试图解决的实际问题(尽管问题的标题)就像我说的那样,打开新的 tab/windows 按 ctrl+单击(或中键单击),所以如果有任何其他方法也可以。
在从 Alex Maitland(CefSharp 的主要贡献者)那里得到对这个问题的回应后,似乎在最新的 Cef(和 CefSharp)中添加了对此的回调,现在在最新的 CefSharp 的主分支上。
答案是在 IRequestHandler
上使用 OnOpenUrlFromTab
(它在我使用的版本上不可用)并检查 WindowOpenDisposition
。
我试图诱使 "Control+Click" 在 CefSharp winforms 客户端应用程序中打开新的 windows/tabs。
最明显的方法是在 IRequestHandler
上使用 OnBeforeBrowse
,所以我做了这样的事情(实际功能更复杂,但不要紧):
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;
}
这绝对适用于 "normal" link 点击。但是当你点击锚点 link(通过 javascript 或其他方式加载一些 AJAX 时),会发生两件事:
- 如果 link 与当前加载的相同或不同 URL 中的锚点 link 相同,它确实会调用
OnBeforeBrowse
并且它'我会正常工作(在我的例子中打开一个新的 window)。 - 如果link是同一个URL但不同锚点的锚点link,则不会发出
OnBeforeBrowse
,所以我无法控制加载通过那条路。
我尝试使用 OnBeforeResourceLoad
,但是 TransitionType
对于它在 ajax 调用(和 GET
)期间加载的任何资源都是 LinkClicked
并且我只是在实际点击的 link 和加载的其余资源的 OnBeforeResourceLoad
的参数中找不到任何不同之处。
关于如何实现这一点有什么想法吗?
PS:我并不想把它变成 "XY problem",我试图解决的实际问题(尽管问题的标题)就像我说的那样,打开新的 tab/windows 按 ctrl+单击(或中键单击),所以如果有任何其他方法也可以。
在从 Alex Maitland(CefSharp 的主要贡献者)那里得到对这个问题的回应后,似乎在最新的 Cef(和 CefSharp)中添加了对此的回调,现在在最新的 CefSharp 的主分支上。
答案是在 IRequestHandler
上使用 OnOpenUrlFromTab
(它在我使用的版本上不可用)并检查 WindowOpenDisposition
。