2013-03-11 3 views
0

GWT 2.5를 사용하고 있으며 한 패널에서 이미지를 만들고 다른 패널에서 끌어서 놓을 수 있습니다. 이것은 Firefox에서 잘 작동하지만 IE9에서는 작동하지 않으려 고합니다.GWT 이미지 IE9에서 드래그 앤 드롭이 작동하지 않습니다.

나는 거의 하루 종일 수색을했으며 그 해결책을 찾지 못했습니다. 내가 찾은 가장 좋은 스레드가 여기에 다음과 같다 :

Drag and Drop in GWT 2.4

GWT native drag & drop - DragStartEvent not firing on IE9

차이가 나는 드래그 이미지,하지 레이블 야한다는 것입니다. 그래서 이것이 문제가 될 수 있습니다.

// Draggable Image 
final Image img = new Image(imageName); 
img.addDragStartHandler(new DragStartHandler() { 
    @Override 
    public void onDragStart(final DragStartEvent event) { 
    event.setData("text", img.getUrl()); 
    } 
}); 
img.getElement().setDraggable(Element.DRAGGABLE_TRUE); 

가 그럼 난 내 '소스'패널에 넣어 :

그래서 코드는 다음과 같이 보입니다

이미지가 올바르게 표시됩니다
// Image in the source container 
wunschContainer = new AbsolutePanel(); 
img.setPixelSize(size, size); 
wunschContainer.add(img, left, top); 

(파이어 폭스와 IE9)

대상 패널은 다음과 같습니다 (이는 AbsolutePanel의 하위 클래스이며 HasDragOverHandlers 및 HasDropHandlers를 구현합니다)

// Event-handlers for the target container. 
this.addDragOverHandler(new DragOverHandler() { 
    @Override 
    public void onDragOver(final DragOverEvent event) { 
    } 
}); 

this.addDropHandler(new DropHandler() { 
    @Override 
    public void onDrop(final DropEvent event) { 
    event.preventDefault(); 
    final String data = event.getData("text"); 
    /* ... some more handling ..., creates an image to be displayed here */ 
    add(image, left, top); 
    } 
}); 

Firefox에서는 이미지를 드래그하면 드래그 이미지가 마우스 포인터 아래에 표시됩니다. IE9에서는 전혀 이미지를 볼 수 없으며 단지 심볼 (슬래시가있는 원,이 "허용되지 않는"심볼)입니다. 그리고 마우스 버튼을 놓으면 아무 일도 일어나지 않습니다. 필자는 IE9 모드를 사용하고있는 호환 모드가없는 "F12"도 확인했습니다.

정말 문제가 무엇인지 알 수 없습니다. 코드는 좋아 보인다 (FF로 작동). GWT-Images로 DnD를 만드는 데 문제가 있습니까? 흥미로운 부분은 "onDragStart()"메소드가 실행 중입니다. 그러나 "끌기"는 끝나지 않고있다.

아, 이걸 테스트하기 위해 GWT devmode를 사용하고 있습니다. 이것이 문제가 될 수 있습니까?

저는 GWT만을 사용하여이 문제를 해결하고 싶습니다. 아니면 gwt-dnd와 같은 다른 라이브러리를 사용해야합니까? 아무도 없습니까 일반 GWT DnD IE9에서 작동합니까? 나는 정말 많은 것들을 시도, 그래서. 나는 그 :-(을 시도하는 첫 번째 해요

+0

는 리버스 엔지니어링 HTTP 시도를 : //gwt-cloudtasks.appspot 그래서 나는 다음을 수행 결국 .com 코드 (http://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/mobilewebapp/src/main/java/com/google/gwt/sample/mobilewebapp의 이미지 사용)/ – SSR

+0

또한 flowpanel 또는 라벨에서 이미지를 래핑 해 보았습니까? – SSR

+0

FlowPanel에서 시도한 포장. 변경 없음. – Asturio

답변

1

믿을 수 없어, 나는 해결책을 가로 질러왔다.

문제는 것 같다 "으로 onDragOver는()"메소드 내 원래의 질문에 게시, 나는이 메소드의 빈 구현이 있습니다..이로

this.addDragOverHandler(new DragOverHandler() { 
    @Override 
    public void onDragOver(final DragOverEvent event) { 
    } 
}); 

내가 많은 페이지에서 발견하는 방법입니다 방법은 다른 본, 또는해야한다 드래그 앤 드롭 작동하지 않습니다.하지만 기본 동작 (또는 다른 작업을 막을 필요가 IE에 대한 보인다. 그냥 메서드를 로깅 "뭔가"아니 었어.). 그래서 "event.preventDefault();"추가 만난 사람 hod, 이제 작동합니다.

this.addDragOverHandler(new DragOverHandler() { 
    @Override 
    public void onDragOver(final DragOverEvent event) { 
    event.preventDefault(); 
    } 
}); 

어디서나이 정보를 찾을 수 없다는 것은 이상합니다. 이것은 다른 누군가에게 유용 할 것입니다. 8).

1

IE9에서 GWT 2.6을 사용하여 동일한 문제가 발생했으며 onDragStart에서 데이터를 설정하면 IE9가 꺼지는 것을 발견했습니다.다른 모든 브라우저는 정상적으로 작동합니다.

 this.addDragStartHandler(new DragStartHandler(){ 

     @Override 
     public void onDragStart(DragStartEvent event) { 
      if(!isIE9()){ 
       event.setData(RangeSliderControl.KEY, key); // This causes IE9 to not work     
      } 
     }} 
    ); 

다음과 같이 오프 물론 내 코드에 isIE9() 메소드를 추가했습니다 :

/** 
* Gets the name of the used browser. 
*/ 
public static boolean isIE9() { 
    return (getBrowserName().indexOf("msie 9.0") != -1); 
}; 

/** 
* Gets the name of the used browser. 
*/ 
public static native String getBrowserName() /*-{ 
    return navigator.userAgent.toLowerCase(); 
}-*/; 
+0

언제 데이터를 드래그 스타트에 넣지 않습니까? – Kasas

관련 문제