5

Tôi đang kéo và thả hình ảnh từ một tab trình duyệt khác vào tab cho trang web của tôi. Trình xử lý sự kiện của tôi cho sự kiện "thả" đang hoạt động trong mọi trình duyệt máy tính để bàn khác ngoại trừ Internet Explorer 11.Sự kiện thả Javascript/JQuery không kích hoạt trong Internet Explorer IE 11

IE chỉ điều hướng đến URL của hình ảnh tôi đã bỏ, thay vì kích hoạt sự kiện "thả" và cho phép JS của tôi mã làm những gì nó muốn với nó (như xảy ra trong Chrome, Firefox, Opera và Safari, trên Windows 7). Mã dưới đây. Lưu ý không có cảnh báo nào được liệt kê trong mã lửa.

Tôi thậm chí theo lời khuyên đưa ra trên trang của Microsoft ở đây: https://msdn.microsoft.com/en-us/library/ms536929(v=vs.85).aspx về hủy bỏ hành động mặc định của "DragEnter" và "xác định window.event.returnValue=false trong cả xử lý sự kiện ondragenterondragover" (lưu ý: các trình duyệt khác không yêu cầu tôi có trình xử lý sự kiện 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: 

}); 

Rất cám ơn mọi đề xuất!

Trả lời

1
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. 

Vui lòng tìm liên kết Demo.

+0

@Alex Kerr: Vui lòng chia sẻ phiên bản jQuery và phiên bản trình duyệt IE bạn đang sử dụng. – Thulasiram

+0

Anh ấy nói _ "kéo và thả hình ảnh từ một tab trình duyệt khác vào tab cho trang web của tôi" _ – user10089632

1

Chỉnh sửa: Thú vị với những gì tôi có được here (S.O question/answer), anh chàng này gặp sự cố tương tự khi kéo giữa hai cửa sổ Internet Explorer 11, trên cùng một miền. Vì vậy, một lý do nữa, nếu chúng đến từ các miền khác nhau. Ông trích dẫn:

cho đến nay tôi hiểu rằng điều này sẽ làm việc trên Windows 10 trình duyệt MS với ít nhất 1607 như phiên bản


Thứ nhất, đây là không có nghĩa là dự định được một câu trả lời cho câu hỏi này, nó chỉ phục vụ như một nhóm các điểm có thể giúp xây dựng một câu trả lời cuối cùng cho vấn đề khó hiểu này

Hai trường hợp kịch bản

  1. Cùng miền

    Tested khi cả hai trang trên localhost, Những sự kiện đã bị sa thải thường: bạn sẽ phải thay đổi getData('text/html')-getData('text')IE support only rằng, 'URL' hoặc files vì vậy bạn cần phải thiết lập setData() từ trang gốc cho phù hợp
    (Thông thường, nếu đánh dấu đã kéo là hình ảnh không có bất kỳ liên kết nào, bạn sẽ phạt getData('text') cung cấp cho bạn thuộc tính src của hình ảnh)

  2. On lĩnh vực khác nhau

    Đây là một phần, nơi này là không nhiều của một câu trả lời, những điểm sau đây đã được thử nghiệm và được đưa ra ở đây để được kiểm tra lại, tinh chỉnh hoặc mở rộng để tìm ra một giải pháp. Như một ý nghĩ cuối cùng rằng tôi đặt ở đây trước: có thể điều này là không thể, bởi vì như bạn đã biết, kéo đánh dấu có thể có các kịch bản nội tuyến, làm cho mục tiêu dễ bị tấn công XSS. Nó không phải là rất khó mà tin tặc đã cố gắng để làm cho nó xảy ra (khoảng như tôi đang làm đúng) và mỗi khi Microsoft đã chống lại nó.

    • Vì áp phích ban đầu chỉ ra việc sử dụng returnValue=false là vô nghĩa. Tôi đã thử nó trên sự kiện ban đầu event.originalEvent và với event là sự kiện của window và như thông số handler.

    • Bạn có thể nghĩ vì tôi đã đề cập đến miền rằng đây là một vấn đề miền chéo (rất chính đáng) đây là những gì tôi đã cố gắng trong PHP:

    header("Access-Control-Allow-Origin: *");

    • Sau IE đã được biết đến là dễ bị tấn công XSS, nó có thể đã thực hiện các biện pháp quyết liệt chống lại nó trong IE 11, do đó, quay trở lại hành vi của phiên bản trước đó, IE9 chẳng hạn:

    header('X-UA-Compatible: IE=EmulateIE9');
    header('X-UA-Compatible: IE=9');

NB Các điểm sau đây không có ý định trở thành một giải pháp khả thi (ít nhất là không phải từ góc độ của một nhà phát triển) nó là một nỗ lực để thu hẹp các khả năng về nguồn gốc của vấn đề

  • Bạn có thể muốn thử internet explorer của:

    internet options>Custom level...-->miscellaneous--> under the lable 'allow the dragging of content between separate windows' --> check enable

Hoặc Internet Explorer security zones registry entries for advanced users hoặc sử dụng Thông báo reference

này với mục đích thử nghiệm, bạn có thể làm cho miền chéo kéo giữa IE và FF/Chrome qua lại với DataTransfert hành xử gần như giữa hai IES trên cùng miền.

Các vấn đề liên quan