JavaFXWebView-弹出Javascript上下文菜单
JavaFX WebView - Popping up Javascript context menu
我正在将基于JavaScript的HTML编辑器集成到JavaFX WebView中。(TinyMCE)这个编辑器的一个功能是当鼠标右键点击时弹出一个上下文菜单。
但是,当在WebView中执行此操作时,它会弹出WebView自己的上下文菜单。
从版本2.2开始,有一个名为setContextMenuEnabled
的方法允许我禁用它。但当我这样做的时候,什么都不会弹出。
如何使其正确工作?
在TinyMCE 5中,editor.plugins.contextmenu._getMenu(editor).showMenu(x,y);
不再可用。我更新Avrom解决方案:
webView = new WebView( );
webView.setContextMenuEnabled( false );
webView.addEventHandler( MouseEvent.MOUSE_CLICKED, this::onMouseClicked );
...
private void onMouseClicked( MouseEvent event ) {
WebEngine engine = webView.getEngine( );
if( event.getButton( ) == MouseButton.SECONDARY ) {
JSObject clientRect = ( JSObject )engine.executeScript(
"tinymce.activeEditor.getContentAreaContainer().getBoundingClientRect()"
);
int x = ( Integer )clientRect.getMember( "left" );
int y = ( Integer )clientRect.getMember( "top" );
y = ( int )( event.getY( ) - y );
x = ( int )( event.getX( ) - x );
if( y >= 0 && x >= 0 ) {
engine.executeScript(
"tinymce.activeEditor.fire('contextmenu', { bubbles: true, cancelable: true, view: window, buttons: 2, "
+ "clientX: " + x + ", clientY: " + y + " }, true);"
);
}
}
}
创建自己的插件,处理右键单击并显示一个小的弹出菜单。请参阅tinymce附带的contextmenu
插件的源代码。您可以使用它的大部分代码,只需要自己实现菜单点。
我能够弄清楚这一点。
TinyMCE可以使用以下JavaScript弹出上下文菜单:
editor.plugins.contextmenu._getMenu(editor).showMenu(x,y);
其中editor
是对给定TinyMCE编辑器(例如tinymce.currentEditor
)的引用,x,y是相对于内容区域的坐标。
然后可以在JavaFXWebView中添加一个处理程序,用于监听鼠标右键单击,然后可以从那里执行javascript。
view.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
if (event.getButton() == MouseButton.SECONDARY)
{
JSObject jsObject = (JSObject) engine.executeScript(TINYMCE_EDITOR
+ ".getContentAreaContainer().getBoundingClientRect()");
int x = (Integer) jsObject.getMember("left");
int y = (Integer) jsObject.getMember("top");
y = (int) (event.getY() - y);
x = (int) (event.getX() - x);
System.out.println(x + ", " + y);
if (y >= 0 && x >= 0)
engine.executeScript(TINYMCE_EDITOR + ".plugins.contextmenu._getMenu(" + TINYMCE_EDITOR
+ ").showMenu(" + x + "," + y + ")");
}
}
});
代码的其余部分试图找出正确的x,y坐标是什么。
相关文章:
- 使用JQuery的动态上下文菜单
- JQuery在单击正文时隐藏上下文菜单
- JQuery上下文菜单显示/隐藏问题
- 防止在移动Safari(iPad/iPhone)中长按/长按默认上下文菜单
- d3防止在上下文菜单上触发mouseout
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 使用JSTree上下文菜单捕获新创建的节点
- 在GXT中激活上下文菜单时,如何保持选中的文本高亮显示?(EXT GWT 2.x)
- HTML5上下文菜单-当菜单项被点击时,访问最初被点击的元素
- 可替代多级上下文菜单
- 如何在鼠标悬停时显示带有拉斐尔元素(圆、线)的上下文菜单
- 在上下文菜单项单击上显示侧边栏/弹出窗口的最佳方法是什么
- 如何使用jstree删除上下文菜单中的编辑选项
- 如何使用Windows Phone在IE上禁用上下文菜单(保存和共享照片)
- TinyMCE 在上下文菜单中创建子菜单
- D3 上下文菜单,更改所选节点颜色
- 剑道上下文菜单 - 防止在鼠标按下时关闭
- 将上下文菜单附加到大量图形点
- API Google Maps Javascript在上下文菜单中调用事件侦听器
- Firefox Add-on-sdk:右键单击子菜单上下文以显示面板