• JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)


    需求:

    在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools)

    所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需要的,所以我们首先要做的就是去除这些选项,参考:java cef3 如何禁止右键菜单项

    同理,我们只需要在CefContextMenuHandler接口的实现类中去定制我们的菜单项即可,代码如下:

    public class ContextMenuHandler implements CefContextMenuHandler {
    
        private final Frame owner;
    
        public ContextMenuHandler(Frame owner) {
            this.owner = owner;
        }
    
        @Override
        public void onBeforeContextMenu(CefBrowser browser, CefContextMenuParams params, CefMenuModel model) {
            model.clear();//清除默认的菜单项
            model.addItem(MenuId.MENU_ID_SHOW_DEV_TOOLS, "开发者选项");
        }
    
        @Override
        public boolean onContextMenuCommand(CefBrowser browser, CefContextMenuParams params, int commandId,
                int eventFlags) {
            switch (commandId) {
                case MenuId.MENU_ID_SHOW_DEV_TOOLS: {
                    // 打开开发者选项
                    DevToolsDialog devToolsDlg = new DevToolsDialog(owner, "开发者选项", browser);
                    devToolsDlg.setVisible(true);
                    return true;
                }
                default: {
                    return false;
                }
            }
        }
    
        @Override
        public void onContextMenuDismissed(CefBrowser browser) {
    
        }
    
    }

    在onBeforeContextMenu中先清除默认的菜单项,然后绑定开发者选项,这里需要注意的是,MenuId.MENU_ID_SHOW_DEV_TOOLS这个在MenuId中是不存在的,需要我们手动添加进去

    接着我们在onContextMenuCommand方法中绑定菜单事件,然后重启服务器,在界面上右键即可看到开发者选项,点击打开开发者选项对话框

    附DevToolsDialog的实现:

    public class DevToolsDialog extends JDialog {
    
        private static final long serialVersionUID = 6859581641415822180L;
    
        private final CefBrowser devTools_;
    
        public DevToolsDialog(Frame owner, String title, CefBrowser browser) {
            this(owner, title, browser, null);
        }
    
        public DevToolsDialog(Frame owner, String title, CefBrowser browser, Point inspectAt) {
            super(owner, title, false);
    
            setLayout(new BorderLayout());
            setSize(800, 600);
            setLocation(owner.getLocation().x + 20, owner.getLocation().y + 20);
    
            devTools_ = browser.getDevTools(inspectAt);
            add(devTools_.getUIComponent());
    
            addComponentListener(new ComponentAdapter() {
                @Override
                public void componentHidden(ComponentEvent e) {
                    dispose();
                }
            });
        }
    
        @Override
        public void dispose() {
            devTools_.close();
            super.dispose();
        }
    }
    View Code
  • 相关阅读:
    生活小记--工作一年后的菜鸡
    git使用笔记-git项目的建立及配置、创建子分支及独立分支、分支重命名
    React-leaflet在ant-design pro中的基本使用
    ionic新入坑-环境搭建+新建项目+打开低版本项目处理
    canvas绘制圆心扇形可组成颜色随机的七色小花
    取所选当前时间前十二个月的数据
    win10被微软流氓更新后编译基于visual Studio的web项目报[ArgumentOutOfRangeException: 指定的参数已超出有效值的范围
    浅析__proto__、prototype
    JavaScript数据类型
    异步与多线程实现不阻塞区别
  • 原文地址:https://www.cnblogs.com/minteliu/p/5729088.html
Copyright © 2020-2023  润新知