Javascript/JQuery 丢弃事件在 Internet Explorer IE 11 中未触发
Javascript/JQuery drop event not firing in Internet Explorer IE 11
我正在将图像从不同的浏览器选项卡拖放到我的网页选项卡中。我的"drop"事件的事件处理程序在除 Internet Explorer 11 之外的所有其他桌面浏览器中都可以工作。
IE只是导航到我丢弃的图像的URL,而不是触发"drop"事件并让我的JS代码使用它做它想要的事情(就像在Windows 7上的Chrome,Firefox,Opera和Safari中发生的那样)。代码如下。请注意,代码中列出的警报均未触发。
我甚至遵循了Microsoft页面上给出的建议:https://msdn.microsoft.com/en-us/library/ms536929(v=vs.85).aspx关于取消"DragEnter"的默认操作和"在ondragenter
和ondragover
事件处理程序中指定window.event.returnValue=false
"(注意:其他浏览器不需要我有一个dragEnter事件处理程序)
$(window).on("dragenter", function(event) {
alert('drag enter');
event.returnValue = false;
event.preventDefault();
event.stopPropagation();
});
$(window).on("dragover", function(event) {
alert('drag over');
event.returnValue = false;
event.preventDefault();
event.stopPropagation();
});
$(window).on("dragleave", function(event) {
alert('drag leave');
event.preventDefault();
event.stopPropagation();
});
$(window).on("drop", function(event) {
alert('drop');
event.preventDefault();
event.stopPropagation();
var imageSrc = $(event.originalEvent.dataTransfer.getData('text/html'))
.filter(function(i, elm){return $(elm).is('img');}).attr('src');
// Now do something with the imageSrc URL:
});
非常感谢您的任何建议!
It is working fine in IE Browser Version:11.0.40 for jQuery 2.2.4 version.
Please check your jQuery version
Note: for me event has been fired for two times when dragging image from desktop to IE 11 browser.
请找到演示链接。
编辑:有趣的是,我在这里得到了什么(S.O问题/答案),他们在同一域上的两个Internet Explorer 11窗口之间拖动时遇到了类似的问题。所以还有一个原因,如果他们来自不同的领域。他引用:
到目前为止,我知道这将适用于 Windows 10 MS 浏览器 至少 1607 年的版本
首先,这绝不是要回答这个问题,它只是作为一组要点,可能有助于为这个令人困惑的问题找到最终答案。
两种情况
-
在同一域上
测试当两个页面都在
localhost
,这些事件已经正常触发:您必须将getData('text/html')
更改为getData('text')
,因为IE仅支持'URL'
或文件所以你需要相应地
设置原始页面的setData()
(通常,如果拖动的标记是没有任何链接的图像,则可以getData('text')
为您提供图像的属性src
) -
在不同的域上
这是这不是太多答案的部分,已经尝试了以下几点,并在此处给出以重新测试,调整或扩展以找到解决方案。作为我首先提出的最后一个想法:可能这是不可能的,因为您可能已经知道,拖动的标记可以具有内联脚本,从而使目标容易受到XSS攻击。黑客试图让它发生的可能性并不大(大致就像我做对了一样),每次Microsoft都抵消了它。
-
正如原始海报所指出的那样,使用
returnValue=false
毫无意义。我已经在原始事件event.originalEvent
上尝试过,并将event
作为window
的事件和handler
参数。 -
你可能会认为,因为我提到了域,这是一个跨域的问题(非常合法),这是我在PHP中尝试过的:
header("Access-Control-Allow-Origin: *");
- 在
- IE以易受XSS攻击而闻名之后,它可能在IE 11中采取了严厉的措施,因此恢复到以前版本的行为,例如IE9:
header('X-UA-Compatible: IE=EmulateIE9');
header('X-UA-Compatible: IE=9');
-
注意:以下几点并不是一个可行的解决方案(至少从开发人员的角度来看不是),而是试图缩小问题起源的可能性
-
您可能想尝试Internet Explorer的:
internet options>Custom level...-->miscellaneous--> under the label 'allow the dragging of content between separate windows' --> check enable
或高级用户的 Internet Explorer 安全区域注册表项或使用此参考
请注意,出于测试的目的,您可以在IE和Firefox/Chrome之间来回进行跨域拖动,DataTransfer
的行为大致与同一域上的两个IE之间的行为相同。
- QUnit 测试错误与 IE(Internet Explorer)
- 对于IE浏览器,我需要使用什么来禁用Internet Explorer的默认下拉样式
- 如何阻止IE(Internet Explorer)中的内联块元素获得焦点
- Javascript 在 Internet Explorer 中破坏属性的空值 - 如何让 IE 忽略这一点
- Javascript/JQuery 丢弃事件在 Internet Explorer IE 11 中未触发
- Ajax call in Internet Explorer IE 7 & IE8 error
- Internet Explorer IE 9+ javascript not working
- Javascript和jquery调整大小事件不工作在IE Internet Explorer
- 什么是替代offsetLeft在internet explorer(不工作与我在ie)
- jQuery在Firefox中看起来/工作得很好,但在IE (Internet Explorer)中就不行
- internet explorer - Javascript在没有调试器的情况下无法在IE上运行(F12)
- internet explorer-javascript在Chrome中有效,在IE中无效
- internet explorer-重定向后,IE中的Javascript文档.referrer为空
- internet explorer 8-在Chrome框架的IE中,点击文件附件链接后,Javascript被阻止
- internet explorer - JavaScript Object.create in old IE
- Raphael Javascript在Internet Explorer 8(IE)中制作的图形没有颜色.它们有FF和C
- internet explorer-IE中存在Javascript问题,但FF、Chrome或Safari中没有
- 当试图在Internet Explorer(IE)上附加jQuery对象时,jQuery抛出SCRIPT5022:Hie
- Internet Explorer 11(IE 11)在DOMParser中使用parseFromString引发语法错
- internet explorer-我无法使用BrowserStack或VM重现IE/JavaScript错误.我有什么