需求:
在界面的右鍵事件中添加一個打開開發者選項的菜單(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(); } }
