2010-07-30 5 views
0

위젯을 마우스 오른쪽 버튼으로 클릭하고 브라우저 대신 내 컨텍스트 메뉴를 팝업으로 캡춰하려고합니다. 여기에 몇 가지 참조가 있지만 가장 인기있는 것은 here입니다. 일부 의견에는 최신 코드 단편이 포함되어 있습니다.왜 IE에서 GWT의 오른쪽 클릭 캡처가 작동하지 않습니까?

나는 비트를 결합하여 Chrome과 FF에서는 작동하지만 IE에서는 작동하지 않습니다. IE에서는 기본 브라우저 컨텍스트 메뉴를 표시하지 않지만 내 메뉴는 표시하지 않습니다. GWT에 들어가기 만하면 올바른 종류의 핸들러 나 이벤트를 제대로 수행하지 못하고 있다고 가정합니다. 또한 gwt- 그래픽 모듈을 사용하고 있는데, 확장 된 Rectangle 클래스가 관련성이있는 경우에 사용됩니다.

public class RectangleRightClickable extends Rectangle { 

public RectangleRightClickable(int x, int y, int width, int height) { 
    super(x, y, width, height); 
    sinkEvents(Event.ONCONTEXTMENU); 
} 

public void onBrowserEvent(Event event) { 
    GWT.log("onBrowserEvent"); 
    event.stopPropagation(); 
    event.preventDefault(); 
    GWT.log("event type : " + DOM.eventGetType(event)); 
    switch(DOM.eventGetType(event)) { 
    case Event.ONCONTEXTMENU: 
     if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) { 
      GWT.log("Event.BUTTON_RIGHT", null); 
      showMenu(); 
     } 
     break; 
    default: 
     GWT.log(event.toString()); 
     break; 
    } 
} 

protected void showMenu() { 
    final RectangleRightClickable parent = this; 
    final PopupMenu popMenu = new PopupMenu(); 
    popMenu.addMenuItem(new Label("Add thing")); 
    popMenu.setPopupPositionAndShow(new PopupPanel.PositionCallback() { 
     public void setPosition(int offsetWidth, int offsetHeight) { 
      int left = parent.getX() + parent.getWidth(); 
      int top = parent.getY() + parent.getWidth(); 
      popMenu.setPopupPosition(left, top); 
     } 
    }); 

} 
} 

답변

0

근무 GWT 구글 그룹 목록에이 응답을 얻었다 :

addDomHandler(new ContextMenuHandler() 
{ 
    @Override 
    public void onContextMenu(ContextMenuEvent event) 
    { 
     showMenu(); 
     event.preventDefault(); 
    } 
}, ContextMenuEvent.getType()); 
을 여기

내 코드입니다
관련 문제