为鼠标添加自定义菜单,比较简单,实现一个Handler就行

  Hanler实现类

  public class MenuHandler extends CefContextMenuHandlerAdapter{

  private final static int MENU_ID_INJECTION=10000;

  private final static int MENU_ID_ADDTEXT=10001;

  @Override

  public void onBeforeContextMenu(CefBrowser browser, CefFrame frame, CefContextMenuParams params, CefMenuModel model) {

  //清除菜单项

  model.clear();

  //剪切、复制、粘贴

  model.addItem(MenuId.MENU_ID_COPY, "复制");

  model.addItem(MenuId.MENU_ID_CUT, "剪切");

  model.addItem(MenuId.MENU_ID_PASTE, "粘贴");

  model.addSeparator();

  model.addItem(MenuId.MENU_ID_BACK, "返回");

  model.setEnabled(MenuId.MENU_ID_BACK, browser.canGoBack());

  model.addItem(MenuId.MENU_ID_FORWARD, "前进");

  model.setEnabled(MenuId.MENU_ID_FORWARD, browser.canGoForward());

  model.addItem(MenuId.MENU_ID_RELOAD, "刷新");

  model.addSeparator();

  //创建子菜单

  CefMenuModel cmodel=model.addSubMenu(MENU_ID_INJECTION, "脚本注入");

  cmodel.addItem(MENU_ID_ADDTEXT, "添加一段文本");

  }

  /*

  * @see org.cef.handler.CefContextMenuHandler#onContextMenuCommand(org.cef.browser.CefBrowser, org.cef.browser.CefFrame, org.cef.callback.CefContextMenuParams, int, int)

  */

  @Override

  public boolean onContextMenuCommand(CefBrowser browser, CefFrame frame, CefContextMenuParams params, int commandId, int eventFlags) {

  switch(commandId) {

  case MenuId.MENU_ID_RELOAD:

  browser.reload();

  return true;

  case MENU_ID_ADDTEXT:

  browser.executeJavaScript("document.body.innerHTML+='

  添加一段文本

  ';", browser.getURL(), 0);

  return true;

  }

  return false;

  }

  }

  测试类,在cefClient中添加此Handler:cefClient.addContextMenuHandler(new MenuHandler());

  public class MouseMenuTestFrame extends JFrame{

  /**

  *

  */

  private static final long serialVersionUID = 5944953587408136931L;

  public static void main(String[] args) {

  String url=System.getProperty("user.dir")+"/jstest.html";

  new MouseMenuTestFrame(url);

  }

  public MouseMenuTestFrame(String url) {

  //是否Linux系统

  boolean useOSR=OS.isLinux();

  //是否透明

  boolean isTransparent=false;

  //添加Handler,在CEFAPP状态为终止时退出程序

  CefApp.addAppHandler(new CefAppHandlerAdapter(null) {

  @Override

  public void stateHasChanged(org.cef.CefApp.CefAppState state) {

  // Shutdown the app if the native CEF part is terminated

  if (state == CefAppState.TERMINATED) System.exit(0);

  }

  });

  CefSettings settings = new CefSettings();

  settings.windowless_rendering_enabled = useOSR;

  //获取CefApp实例

  CefApp cefApp=CefApp.getInstance(settings);

  //创建客户端实例

  CefClient cefClient = cefApp.createClient();

  //添加鼠标右键菜单handler

  cefClient.addContextMenuHandler(new MenuHandler());

  //添加一个JS交互

  jsActive(cefClient);

  //创建浏览器实例

  CefBrowser cefBrowser = cefClient.createBrowser(url, useOSR, isTransparent);

  //将浏览器UI添加到窗口中

  getContentPane().add(cefBrowser.getUIComponent(), BorderLayout.CENTER);

  pack();无锡人流多少钱 http://www.bhnnk120.com/

  setTitle("测试JCEF-鼠标右键事件");

  setSize(800, 600);

  setVisible(true);

  //添加一个窗口关闭监听事件

  addWindowListener(new WindowAdapter() {

  @Override

  public void windowClosing(WindowEvent e) {

  CefApp.getInstance().dispose();

  dispose();

  }

  });

  }

  /**

  * 添加js交互

  * @author:liuming

  */

  public void jsActive(CefClient client) {

  //配置一个查询路由,html页面可使用 window.java({}) 和 window.javaCancel({}) 来调用此方法

  CefMessageRouterConfig cmrc=new CefMessageRouterConfig("java","javaCancel");

  //创建查询路由

  CefMessageRouter cmr=CefMessageRouter.create(cmrc);

  cmr.addHandler(new CefMessageRouterHandler() {

  @Override

  public void setNativeRef(String str, long val) {

  System.out.println(str+" "+val);

  }

  @Override

  public long getNativeRef(String str) {

  System.out.println(str);

  return 0;

  }

  @Override

  public void onQueryCanceled(CefBrowser browser, CefFrame frame, long query_id) {

  System.out.println("取消查询:"+query_id);

  }

  @Override

  public boolean onQuery(CefBrowser browser, CefFrame frame, long query_id, String request, boolean persistent,

  CefQueryCallback callback) {

  System.out.println("request:"+request+"\nquery_id:"+query_id+"\npersistent:"+persistent);

  callback.success("Java后台处理了数据");

  return true;

  }

  }, true);

  client.addMessageRouter(cmr);

  }

  }

JCEF-鼠标右键菜单的更多相关文章

  1. jQuery自定义Web页面鼠标右键菜单

    jQuery自定义Web页面鼠标右键菜单 右键菜单是固定的,很多时候,我们需要自定义web页面自定义菜单,指定相应的功能. 自定义的原理是:jQuery封装了鼠标右键的点击事件(“contextmen ...

  2. Qt creator 创建鼠标右键菜单 (不新建类)

    界面 步骤 打开你的界面文件并选中你要添加右键的控件,选择“CustomContextMenu” 右键选择“转到槽...” -> customContextMenuRequested 插入下面代 ...

  3. 如何在C#添加鼠标右键菜单

    C#添加鼠标右键方法步骤: 1 选中要添加右键功能的Form或者控件,打开控件的设计页面. 2 从工具箱中找到ContextMenuStrip控件,将这个控件拖曳到Form或者控件的设计页面上.这时系 ...

  4. 将EmEditor加入到鼠标右键菜单

    在清理系统的时候,无意中将EmEditor的鼠标右键功能给清理掉了,在EmEditor的配置中又没有找到如何加入到鼠标右键菜单的方法,只好使用导入注册表功能了,以下的代码,拷贝到记事本中,保存为EmE ...

  5. JAVA GUI学习 - JPopupMenu鼠标右键菜单组件学习

    public class JPopmenuKnow { public void test() { //为表格添加鼠标右键菜单 JMenuItem jMenuItemFileInfo = new JMe ...

  6. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

  7. Qt532.【转】Qt创建鼠标右键菜单

    ZC:可以通过 设置  (QWebView*)->setContextMenuPolicy(NoContextMenu); 来关闭 QWebView的默认右键菜单 Qt创建鼠标右键菜单_疯华正茂 ...

  8. Jquery如何禁止鼠标右键菜单

    jquery中使用contextmenu事件,如果返回true,则允许右键菜单:如果返回false,则禁止右键菜单 导入文件 <script type="text/javascript ...

  9. 将Sublime Text 添加到鼠标右键菜单的教程方法

    安装notepad++软件,在菜单右键自动会添加“edit with notepad++"的选项,那么怎么将Sublime Text 添加到鼠标右键菜单呢?下面是我的操作过程,希望有帮助! ...

  10. js自定义鼠标右键菜单

    document.oncontextmenu = function(e) { return false; } document.onmousedown = function(e) { switch(e ...

随机推荐

  1. JDOJ 2157 Increasing

    洛谷 P3902 递增 洛谷传送门 JDOJ 2157: Increasing JDOJ传送门 Description 数列A1,A2,--,AN,修改最少的数字,使得数列严格单调递增. Input ...

  2. 使用EventBus对模块解耦(附实例)

    用于模块间解耦,通过发布订阅的方式调用,每个人只负责自己的那部分. 写个小例子,比如现在有三个模块,订单.购物车.优惠券,由不同的人负责开发. 负责订单模块的人现在需要写个生成订单的方法,生成订单的逻 ...

  3. Pandas | 14 统计函数

    统计方法有助于理解和分析数据的行为.可以将这些统计函数应用到Pandas的对象上. pct_change()函数 系列,DatFrames和Panel都有pct_change()函数.此函数将每个元素 ...

  4. win +R

    一.电脑设置免登录密码及修改密码 1.win+R 2.输入control userpasswords2 3.勾选免密码账号登陆,修改密码 二.打开性能监视器 1.win+R 2.输入perfmon.e ...

  5. Spring Boot 知识笔记(全局异常)

    通过ControllerAdvice和ExceptionHandler捕获异常和错误信息,向前端返回json格式的状态码及异常描述信息. 1.新建一个Controller,抛出一个异常. packag ...

  6. readfile,read,createReadStream函数

    这三个函数使用前都需要引入fs模块(var fs= require(“fs”) ) readfile:读取文件内容的异步函数,readFile方法是将要读取的文件内容完整读入缓存区,再从该缓存区中读取 ...

  7. 第10组 Beta冲刺(2/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 编写商品主界面 展示GitHub当日代码/文档签入记录 暂无代码 接下来的计划 编写购买功能 还剩下哪些 ...

  8. python: 添加自定义模块路径 —— 可以使用相对路径

    自定义模块时,添加模块路径: sys.path.append('..')

  9. 2018-2019-2 网络对抗技术 20165318 Exp 9 Web安全基础

    2018-2019-2 网络对抗技术 20165318 Exp 9 Web安全基础 基础问题回答 实践过程记录 WebGoat安装 SQL注入攻击 1.命令注入(Command Injection) ...

  10. github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载

    github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载 参考 https://blog.csdn.net/kcx64/article/details/83 ...