2012-03-29 33 views
9

Điều này gây ra một số nỗi đau giữa những người dùng IE8 của tôi.Điều gì khiến IE8 chặn một số tệp tải xuống?

Trên trang web của tôi, tôi có tệp tải xuống được khởi chạy qua tập lệnh php (file_download.php? File = X123). Trong trang này, nó ghi lại một số dữ liệu vào cơ sở dữ liệu, sau đó sử dụng các tiêu đề để bắt buộc tải xuống. Mọi thứ trên trang này dường như hoạt động tốt trên tất cả các trình duyệt.

Cách tôi gọi trang này dường như mang lại cho tôi ít phiền toái "Để giúp bảo vệ bảo mật của bạn - Internet Explorer đã chặn trang web tải tệp xuống máy tính của bạn".

Nếu tôi sử dụng thẻ href thông thường <a href="/file_download.php?file=X123">download</a>, nó sẽ khởi chạy chính xác (không có thư tải xuống bị chặn IE).

Nhưng khi tôi khởi chạy bằng tập lệnh jQuery, nó cho tôi cảnh báo này.

Vì vậy, tôi nhận thấy IE8 có thể nghi ngờ chuyển hướng javascript, vì vậy tôi đã tạo một hàm JS đơn giản trên trang địa phương, nhưng nó không hoạt động.

Vì vậy, có vẻ như jQuery có thể là thủ phạm ... có phải vì sự kiện window.location được gọi từ một trang hoặc nguồn tập lệnh khác không? Có ai biết về công việc này như thế nào không?

Tôi sẽ tiếp tục thử nghiệm nhưng hiện tại, có ai có thể tỏa sáng một chút về vấn đề này không? Yêu cầu người dùng tinh chỉnh cài đặt IE của họ không phải là một tùy chọn.

Cảm ơn

-------- jQuery Mã --------------

  jQuery("a").click(function(e){ 

      if(jQuery(this).attr("href") !== undefined){ 

       downloadLink = jQuery(this).attr("href"); 
       thingClicked = jQuery(this); 

       dll_io = downloadLink.indexOf("/file_download.php?file_id="); 
       dll_io2 = downloadLink.indexOf("/file_download_safe.php?file_id="); 


        if(dll_io == 0 || dll_io2 == 0){ 

         e.preventDefault(); 

         jQuery.getScript("/includes/get_login.php?file_id=" + downloadLink + "&dll_io=" + dll_io + "&dll_io2=" + dll_io2 + "&last_url=" + document.URL, function(rp){ 
          //get_login.php sets 'requested_dl_id' cookie 

          if(dll_io2 == 0){ 
           window.location = downloadLink; 
          }else{ 
           if(rp == "allow"){ 
            window.location = downloadLink; 
           }else{ 
            jQuery("#download_prompt").click(); 
           } 
          }//end condition: if file_download_safe -> set cookie and send to page. IF file_download -> set cookie and decide to prompt or not. 

         }); 
        }//end if fd == file_download.php 
      }//end only execute code if 'a' has a defined 'href' attribute 

     }); 

---- cập nhật ----

Bây giờ tôi đã tự học đủ để hiểu nguyên nhân của vấn đề này - nhưng không có giải pháp đơn giản. Nguyên nhân là IE7 & 8 tự động chặn tải xuống được khởi chạy từ các sự kiện không phải của người dùng. Vì vậy, một sự kiện onclick sẽ khởi chạy một tải xuống, nhưng không phải là một kịch bản jQuery. Vẫn đang tìm kiếm giải pháp thay thế.

+0

+1 chỉ dành riêng cho dòng đầu tiên một mình ... – jeroen

+0

Bạn có thể gửi mã nghi ngờ? –

+0

Bạn đang tải bản sao của jQuery được lưu trữ trên miền của bạn hay bạn đang kéo nó từ một miền khác (như CDN)? –

Trả lời

4

Sử dụng JavaScript để kích hoạt tải xuống là một cách phổ biến để phân phối phần mềm độc hại (ví dụ: quảng cáo biểu ngữ có thể kích hoạt tải xuống trên tất cả các trang web hiển thị quảng cáo).

Nó không làm tôi ngạc nhiên khi nó kích hoạt "cờ đỏ" và làm tăng các biện pháp phòng ngừa an ninh.

Tôi nghĩ rằng tùy chọn duy nhất của bạn là không sử dụng javascript để kích hoạt tải xuống. Có cách nào khác bạn có thể làm được không?

4

tôi không thể bật lại "Để giúp bảo vệ an ninh của bạn" thingie, nhưng dựa trên this articlewindow.location có thể là thủ phạm.

có bạn cố gắng

$('<iframe>', {src:downloadLink}).appendTo('body'); 

ở vị trí của

window.location = downloadLink; 
+0

là một nỗ lực dũng cảm, nhưng tôi vẫn nhận được cửa sổ lỗi. –

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