GWT图像拖放IE9无法正常工作

时间:2013-03-11 16:35:13

标签: image internet-explorer gwt drag-and-drop

我正在使用GWT 2.5,我想在另一个Panel中的一个Panel Draggable和Dropable中制作一些图像。这在Firefox上工作正常,但在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);

图像显示正确(Firefox和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上我根本看不到图像,只是一个符号(带有斜线的圆圈,这个“不允许”的符号)。当我释放鼠标按钮时,什么也没发生。我还用“F12”检查了我使用的是IE9模式,没有兼容模式。

我真的不知道问题是什么。代码似乎没问题(适用于FF)。使用GWT-Images制作DnD有问题吗?有趣的是,“onDragStart()”方法正在被解雇。但是“拖累”还没有完成。

哦,我正在使用GWT devmode来测试它。这可能是个问题吗?

我想仅使用GWT来解决这个问题。或者我应该去使用另一个库,比如gwt-dnd?有没有人在IE9上使用普通 GWT DnD?我不敢相信我是第一个尝试的人: - (。

2 个答案:

答案 0 :(得分:1)

所以,我尝试了很多东西,我遇到了一个解决方案。

问题似乎出现在“onDragOver()”方法中。正如我在原始问题中发布的那样,我有一个空方法实现:

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

因为这是我在很多页面中找到的。必须存在该方法,否则Drag n Drop将不起作用。但似乎对于IE我甚至需要阻止默认行为(或做其他事情。只是记录方法不是“某事”)。所以我添加了一个“event.preventDefault();”对方法,现在它的工作原理。

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

奇怪的是,我无法在任何地方找到这些信息。希望对其他人有用8 - )。

答案 1 :(得分:1)

我使用GWT 2.6遇到了与IE9相同的问题,我发现在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();
}-*/;