IContextMenuHandler
を実装し、CefMenuCommand
の組み込み機能とTypeFlag
の組み込み関数を使用することをお勧めします。これにより、右クリックされた要素に基づいてコンテキストメニュー項目を追加または削除することができます。
MenuHandler.cs
internal class MenuHandler : IContextMenuHandler
{
private const int SaveImage = 26503;
private const int OpenLinkNewTab = 26501;
public event EventHandler OnSaveImage = delegate { };
void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
{
if(parameters.TypeFlags.HasFlag(ContextMenuType.Media) && parameters.HasImageContents)
{
model.AddItem((CefMenuCommand)SaveImage, "Save image");
}
if(!string.IsNullOrEmpty(parameters.UnfilteredLinkUrl))
{
model.AddItem((CefMenuCommand)OpenLinkNewTab, "Open link in new tab");
}
}
bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
{
return false;
}
void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
if ((int)commandId == SaveImage)
{
OnSaveImage?.Invoke(this, new ImageSaveEventArgs(parameters.SourceUrl)); //ImageSaveEventArgs is just a class with one property that houses the source url of the image to download.
}
}
bool IContextMenuHandler.RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
{
return false;
}
}
次に、あなたがあなたのChromiumWebBrowser
インスタンスを作成どこでも、あなたがこのような何か行うことができます。
ChromiumWebBrowser browser = new ChromiumWebBrowser();
MenuHandler menuHandler = new MenuHandler();
menuHandler.OnSaveImage += Handler_OnSaveImage;
browser.MenuHandler = menuHandler;
private void Handler_OnSaveImage(object sender, EventArgs e)
{
DownloadImage(((ImageSaveEventArgs)e).SourceUrl);
}
注意、これは内蔵のIContextMenuHandler
得るために使用しての単なる一例ですユーザーが右クリックした内容、自分のイベントを処理して、必要な動作を実装することができます。この場合、URLからファイルをダウンロードすることができます。
MenuHandler.csのCefSharp
の詳細やその他の例については、GitHubのページをご覧ください。
出典
2017-01-23 13:59:37
TEK
既存のWebブラウザではそうしないと考えてください。代わりに、各ネストされた要素はclickイベントを受け取り、独自のロジックに従って処理します。したがって、例の場合、aとdivs、およびimageはすべて、そのクリックイベントを外側から内側(順番に)。アンカーがhrefを持っている場合、それはナビゲーションアクションになるべきであり、それゆえさらなる伝播を妨げると論理が言います。 – Paul
'var p = el_tag;一方、(1){p = p.parentElement.tagName; if(p == 'a' || p == 'body'){alert(p);}ブレーク; }} ' これはいかがですか? –
?私はあなたがあなたがCで働いていると言ったと思った# – Paul