From 5456e6611d2ffcce88a826810b3a7bfa2b4c8a5b Mon Sep 17 00:00:00 2001 From: chfei Date: Fri, 21 Aug 2026 14:14:47 +0800 Subject: [PATCH] =?UTF-8?q?CEF=20Debug=20=E5=A2=9E=E5=8A=A0=20=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E5=B7=A5=E5=85=B7=20=E5=88=A0=E9=99=A4=20From=20?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Work/_29Tools/CefTools/LocalMenuHandler.cs | 440 +++++++++++---------- 1 file changed, 226 insertions(+), 214 deletions(-) diff --git a/Work/_29Tools/CefTools/LocalMenuHandler.cs b/Work/_29Tools/CefTools/LocalMenuHandler.cs index cb96244..55c86aa 100644 --- a/Work/_29Tools/CefTools/LocalMenuHandler.cs +++ b/Work/_29Tools/CefTools/LocalMenuHandler.cs @@ -16,244 +16,256 @@ using System.Windows.Forms; namespace Work._29Tools.CefTools { - public class LocalMenuHandler : IContextMenuHandler - { - public List ContextMenuList; - public Func, TData> SaveCookie; - public List CookieList; + public class LocalMenuHandler : IContextMenuHandler + { + public List ContextMenuList; + public Func, TData> SaveCookie; + public List CookieList; - void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) - { + void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model) + { - model.Clear(); - bool hasCopyPaste = false; + model.Clear(); + bool hasCopyPaste = false; - if ((parameters.EditStateFlags & ContextMenuEditState.CanCopy).ParseToInt() != 0) - { - model.AddItem(CefMenuCommand.Copy, "复制"); - hasCopyPaste = true; - } - if ((parameters.EditStateFlags & ContextMenuEditState.CanPaste).ParseToInt() != 0) - { - model.AddItem(CefMenuCommand.Paste, "粘贴"); - hasCopyPaste = true; - } - if (hasCopyPaste) - { - model.AddSeparator(); - } + if ((parameters.EditStateFlags & ContextMenuEditState.CanCopy).ParseToInt() != 0) + { + model.AddItem(CefMenuCommand.Copy, "复制"); + hasCopyPaste = true; + } + if ((parameters.EditStateFlags & ContextMenuEditState.CanPaste).ParseToInt() != 0) + { + model.AddItem(CefMenuCommand.Paste, "粘贴"); + hasCopyPaste = true; + } + if (hasCopyPaste) + { + model.AddSeparator(); + } - model.AddItem(CefMenuCommand.Back, "后退"); - model.AddItem(CefMenuCommand.Forward, "前进"); - model.AddItem(CefMenuCommand.ReloadNoCache, "刷新"); - model.AddSeparator(); + model.AddItem(CefMenuCommand.Back, "后退"); + model.AddItem(CefMenuCommand.Forward, "前进"); + model.AddItem(CefMenuCommand.ReloadNoCache, "刷新"); + model.AddSeparator(); - model.AddItem(CefMenuCommand.ViewSource, "查看页面源代码"); - model.AddSeparator(); + model.AddItem(CefMenuCommand.ViewSource, "查看页面源代码"); + model.AddSeparator(); - model.AddItem((CefMenuCommand)26500, "复制页面地址"); + model.AddItem((CefMenuCommand)26500, "复制页面地址"); - if (parameters.MediaType == ContextMenuMediaType.Image) - { - model.AddSeparator(); - model.AddItem((CefMenuCommand)26600, "复制图片地址"); - model.AddItem((CefMenuCommand)26601, "保存图片"); + if (parameters.MediaType == ContextMenuMediaType.Image) + { + model.AddSeparator(); + model.AddItem((CefMenuCommand)26600, "复制图片地址"); + model.AddItem((CefMenuCommand)26601, "保存图片"); - if (NaiBaGlobalConfig.IsNewFeature) - { - model.AddSeparator(); - model.AddItem((CefMenuCommand)26700, "识别图片文字"); - } - } - if ((parameters.EditStateFlags & ContextMenuEditState.CanTranslate).ParseToInt() != 0) - { - model.AddSeparator(); - model.AddItem((CefMenuCommand)26800, "翻译网页"); - } + if (NaiBaGlobalConfig.IsNewFeature) + { + model.AddSeparator(); + model.AddItem((CefMenuCommand)26700, "识别图片文字"); + } + } + if ((parameters.EditStateFlags & ContextMenuEditState.CanTranslate).ParseToInt() != 0) + { + model.AddSeparator(); + model.AddItem((CefMenuCommand)26800, "翻译网页"); + } - if (SaveCookie != null) - { - model.AddSeparator(); - model.AddItem((CefMenuCommand)26900, "保存 Cookie"); - } + if (SaveCookie != null) + { + model.AddSeparator(); + model.AddItem((CefMenuCommand)26900, "保存 Cookie"); + } - if (ContextMenuList != null && ContextMenuList.Any()) - { - model.AddSeparator(); - if (ContextMenuList.Where(p => p.CommandCode < 28000 || p.CommandCode > 28500).Any()) - { - BaseMsgTipFormHelper.ShowError("Cef右键菜单,无效的 CommandCode,CommandCode 的范围 28000-28500"); - return; - } - foreach (var menu in ContextMenuList) - { - model.AddItem((CefMenuCommand)menu.CommandCode, menu.CommandText); - } - } - } + if (ContextMenuList != null && ContextMenuList.Any()) + { + model.AddSeparator(); + if (ContextMenuList.Where(p => p.CommandCode < 28000 || p.CommandCode > 28500).Any()) + { + BaseMsgTipFormHelper.ShowError("Cef右键菜单,无效的 CommandCode,CommandCode 的范围 28000-28500"); + return; + } + foreach (var menu in ContextMenuList) + { + model.AddItem((CefMenuCommand)menu.CommandCode, menu.CommandText); + } + } +#if DEBUG + model.AddSeparator(); + model.AddItem((CefMenuCommand)99990, "开发者工具"); +#endif + } - public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) - { - if (commandId == (CefMenuCommand)26500) - { - string url = parameters.PageUrl; - if (!string.IsNullOrEmpty(url)) - { - Clipboard.SetText(url); - BaseMsgTipFormHelper.ShowInfo("复制页面地址到剪贴板成功"); - } - else - { - BaseMsgTipFormHelper.ShowError("复制页面地址到剪贴板失败"); - } - return true; - } + public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags) + { + if (commandId == (CefMenuCommand)26500) + { + string url = parameters.PageUrl; + if (!string.IsNullOrEmpty(url)) + { + Clipboard.SetText(url); + //BaseMsgTipFormHelper.ShowInfo("复制页面地址到剪贴板成功"); + } + else + { + //BaseMsgTipFormHelper.ShowError("复制页面地址到剪贴板失败"); + } + return true; + } - if (commandId == (CefMenuCommand)26600) - { - string url = parameters.SourceUrl; - if (!string.IsNullOrEmpty(url)) - { - Clipboard.SetText(url); - BaseMsgTipFormHelper.ShowInfo("复制图片地址到剪贴板成功"); - } - else - { - BaseMsgTipFormHelper.ShowError("复制图片地址到剪贴板失败"); - } - return true; - } + if (commandId == (CefMenuCommand)26600) + { + string url = parameters.SourceUrl; + if (!string.IsNullOrEmpty(url)) + { + Clipboard.SetText(url); + //BaseMsgTipFormHelper.ShowInfo("复制图片地址到剪贴板成功"); + } + else + { + //BaseMsgTipFormHelper.ShowError("复制图片地址到剪贴板失败"); + } + return true; + } - if (commandId == (CefMenuCommand)26601) - { - string url = parameters.SourceUrl; - SaveFileDialog dialog = FormDialogHelper.SaveFileDialogCustom(Path.GetFileNameWithoutExtension(url), Path.GetExtension(url), false, false); - if (dialog != null) - { - try - { - HttpHelper.DownloadFile(new HttpParam { Url = url }, dialog.FileName); - } - catch (Exception ex) - { - LogHelper.WriteWithTime(ex); - } - } - return true; - } + if (commandId == (CefMenuCommand)26601) + { + string url = parameters.SourceUrl; + SaveFileDialog dialog = FormDialogHelper.SaveFileDialogCustom(Path.GetFileNameWithoutExtension(url), Path.GetExtension(url), false, false); + if (dialog != null) + { + try + { + HttpHelper.DownloadFile(new HttpParam { Url = url }, dialog.FileName); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + return true; + } - if (commandId == (CefMenuCommand)26700) - { - string url = parameters.SourceUrl; - try - { - if (NaiBaGlobalConfig.ImageOCR != null) - { - var byteArr = HttpHelper.GetByte(new HttpParam { Url = url }); - var obj = NaiBaGlobalConfig.ImageOCR(Convert.ToBase64String(byteArr)); - if (obj.Tag == 1) - { - FileHelper.OpenNotepad(string.Join(Environment.NewLine, obj.Data)); - } - else - { - BaseMsgFormHelper.ShowError(obj.Message); - } - } - } - catch (Exception ex) - { - LogHelper.WriteWithTime(ex); - } - return true; - } + if (commandId == (CefMenuCommand)26700) + { + string url = parameters.SourceUrl; + try + { + if (NaiBaGlobalConfig.ImageOCR != null) + { + var byteArr = HttpHelper.GetByte(new HttpParam { Url = url }); + var obj = NaiBaGlobalConfig.ImageOCR(Convert.ToBase64String(byteArr)); + if (obj.Tag == 1) + { + FileHelper.OpenNotepad(string.Join(Environment.NewLine, obj.Data)); + } + else + { + BaseMsgFormHelper.ShowError(obj.Message); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return true; + } - if (commandId == (CefMenuCommand)26800) - { - try - { - string fileName = "NaiBa.CefHelper.Resources.google_translate.js"; - string js = FileHelper.GetResourceFileContent(Assembly.GetExecutingAssembly(), fileName); + if (commandId == (CefMenuCommand)26800) + { + try + { + string fileName = "NaiBa.CefHelper.Resources.google_translate.js"; + string js = FileHelper.GetResourceFileContent(Assembly.GetExecutingAssembly(), fileName); - browser.MainFrame.ExecuteJavaScriptAsync(js); - } - catch (Exception ex) - { - LogHelper.WriteWithTime(ex); - } - return true; - } + browser.MainFrame.ExecuteJavaScriptAsync(js); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return true; + } - if (commandId == (CefMenuCommand)26900) - { - try - { - if (CookieList == null) - { - BaseMsgTipFormHelper.ShowError("未获取到 Cookie,请等待页面加载完后再试"); - } - else - { - var obj = SaveCookie(CookieList); - if (obj.Tag == 1) - { - BaseMsgTipFormHelper.ShowInfo("保存 Cookie 成功"); - } - else - { - BaseMsgTipFormHelper.ShowError("保存 Cookie 失败:" + obj.Message); - } - } - } - catch (Exception ex) - { - LogHelper.WriteWithTime(ex); - } - return true; - } + if (commandId == (CefMenuCommand)26900) + { + try + { + if (CookieList == null) + { + BaseMsgTipFormHelper.ShowError("未获取到 Cookie,请等待页面加载完后再试"); + } + else + { + var obj = SaveCookie(CookieList); + if (obj.Tag == 1) + { + BaseMsgTipFormHelper.ShowInfo("保存 Cookie 成功"); + } + else + { + BaseMsgTipFormHelper.ShowError("保存 Cookie 失败:" + obj.Message); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return true; + } - if ((int)commandId >= 28000 && (int)commandId <= 28500) - { - if (ContextMenuList != null) - { - var contextMenu = ContextMenuList.Where(p => p.CommandCode == (int)commandId).FirstOrDefault(); - if (contextMenu != null) - { - try - { - contextMenu.CommandAction?.Invoke(parameters); - } - catch (Exception ex) - { - LogHelper.WriteWithTime(ex); - } - return true; - } - } - } + if ((int)commandId >= 28000 && (int)commandId <= 28500) + { + if (ContextMenuList != null) + { + var contextMenu = ContextMenuList.Where(p => p.CommandCode == (int)commandId).FirstOrDefault(); + if (contextMenu != null) + { + try + { + contextMenu.CommandAction?.Invoke(parameters); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return true; + } + } + } - // Return false should ignore the selected option of the user ! - return false; - } - void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame) - { +#if DEBUG + if (commandId == (CefMenuCommand)99990) + { + browser.ShowDevTools(); + return true; + } +#endif + // Return false should ignore the selected option of the user ! + return false; + } - } + void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame) + { - bool IContextMenuHandler.RunContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) - { - return false; - } - } + } - public class CefContextMenu - { - public int CommandCode { get; set; } + bool IContextMenuHandler.RunContextMenu(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback) + { + return false; + } + } - public string CommandText { get; set; } + public class CefContextMenu + { + public int CommandCode { get; set; } - public Action CommandAction { get; set; } - } + public string CommandText { get; set; } + + public Action CommandAction { get; set; } + } }