Image IE9上的GWT图像拖放不工作

Image IE9上的GWT图像拖放不工作,image,internet-explorer,gwt,drag-and-drop,Image,Internet Explorer,Gwt,Drag And Drop,我正在使用GWT2.5,我想在一个面板中制作一些图像,可以在另一个面板中拖放。这在Firefox上运行良好,但在IE9上它就是不想工作 我几乎找了一整天,没有找到任何解决办法。我发现的最好的线程如下: 不同之处在于我拖动的是图像,而不是标签。所以这可能就是问题所在 因此,代码如下所示: //可拖动图像 最终图像img=新图像(图像名称); addDragStartHandler(新的DragStartHandler(){ @凌驾 公共无效onDragStart(最终DragStartEven

我正在使用GWT2.5,我想在一个面板中制作一些图像,可以在另一个面板中拖放。这在Firefox上运行良好,但在IE9上它就是不想工作

我几乎找了一整天,没有找到任何解决办法。我发现的最好的线程如下:

不同之处在于我拖动的是图像,而不是标签。所以这可能就是问题所在

因此,代码如下所示:

//可拖动图像
最终图像img=新图像(图像名称);
addDragStartHandler(新的DragStartHandler(){
@凌驾
公共无效onDragStart(最终DragStartEvent事件){
event.setData(“text”,img.getUrl());
}
});
img.getElement().setDragable(Element.Dragable_TRUE);
然后我把它放在我的“源”面板中:

//源容器中的图像
wunschContainer=新的绝对面板();
img.setPixelSize(大小,大小);
wunschContainer.add(img,左,上);
图像显示正确(Firefox和IE9)

目标面板如下所示(它是AbsolutePanel的一个子类,实现HasDragoverHandler和HasDropHandler)

//目标容器的事件处理程序。
this.addDragOverHandler(新的DragOverHandler(){
@凌驾
公共空间开放(最终Dragover事件){
}
});
this.addDropHandler(新的DropHandler(){
@凌驾
公开作废onDrop(最终DropEvent事件){
event.preventDefault();
最终字符串数据=event.getData(“文本”);
/*…更多处理…,创建要在此处显示的图像*/
添加(图像,左侧,顶部);
}
});
在Firefox中,当我拖动图像时,拖动图像显示在鼠标指针下。在IE9上,我根本看不到图像,只是一个符号(上面有斜线的圆圈,这个“不允许”的符号)。当我松开鼠标按钮时,什么也没发生。我还用“F12”检查了我使用的是IE9模式,没有兼容模式

我真的不知道问题出在哪里。代码似乎正常(在FF上工作)。使用GWT图像制作DnD是否有问题?有趣的是,“onDragStart()”方法正在被激发。但“拖”还没有完成

哦,我正在使用GWT devmode来测试这个。这会是个问题吗


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

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

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

this.addDragOverHandler(新的DragOverHandler(){
@凌驾
公共空间开放(最终Dragover事件){
}
});
这就是我在许多页面中发现的方法。该方法必须存在,否则拖放将无法工作。但对于IE,似乎我甚至需要防止默认行为(或做其他事情。只是记录该方法不是“什么”)。因此我在该方法中添加了“event.preventDefault();”,现在它可以工作了

this.addDragOverHandler(新的DragOverHandler(){
@凌驾
公共空间开放(最终Dragover事件){
event.preventDefault();
}
});

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

我在使用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();
}-*/;

使用中的图像尝试反向工程代码。您是否尝试在flowpanel或标签中包装图像?尝试在flowpanel中包装。没有变化。也尝试使用AbsolutePanel作为包装。实际上,没有办法用图像制作标签。我试着没有图片,只有标签。没有成功。好吧,这真的很奇怪。我想强调的是,我使用的目标是AbsolutePanel,我实现了一些DragNDrop接口。我刚刚扩展了我的类,实现了HasDragOverHandlers、HasDropHandlers、HasDragEnterHandlers、HasDragLeaveHandlers。所有处理程序(DragEnterHandler、DragLeaveHandler和DragOverHandler)都将被激发,但DropHandler没有。如果不将数据放在dragstart上,何时将其放置?